首页 > 解决方案 > Metrics/AbcSize:创建的分配分支条件大小太高。[15.17/15]

问题描述

我宁愿直接从控制器调用我的 JS 方法,但我收到以下 Rubocop 错误。

错误:

Metrics/AbcSize:创建的分配分支条件大小太高。[15.17/15]

控制器:

 def create ...

      def create
        @profile = current_user.profiles.new(modified_profile_params)
        respond_to do |format|
          if @profile.save
            format.html { redirect_to profiles_path }
            format.js { render js: "Helpers.SearchForm.AfterSearchSubmit();" }
          else
            format.html { render action: "new" }
            format.js {
              render js:
                         "Helpers.Bootstrap.Modal.init(
                         'Title',
                         'message','ok',
                         '',
                         '#oldmodal',
                         Helpers.SearchForm.AfterSearchSubmit
                         );"
            }
          end
        end
      end

为了解决这个问题,我尝试了以下方法:

def limit_modal_javascript
           {
                  render js:
                             "Helpers.Bootstrap.Modal.init(
                             'Title',
                             'message','ok',
                             '',
                             '#oldmodal',
                             Helpers.SearchForm.AfterSearchSubmit
                             );"
                }
  end

但是,我在运行时遇到以下错误:

语法错误,意外 tLABEL,期待 do 或 '{' 或 '(' {render js:

标签: controllerruby-on-rails-5.2rubocop

解决方案


您可以通过移动到方法中render的开头之前来修复语法错误。{limit_modal_javascript

但是,有更好的方法来构建它。您可以将其移动到模板中,而不是将 JavaScript 放在控制器中,例如app/views/products/create_succeeded.js. 然后,您可以使用以下方法从控制器渲染它:

format.js { render "products/create_succeeded" }

推荐阅读