10

Rubocop 总是报错:

app/controllers/account_controller.rb:5:3:C:索引的分配分支条件大小太高。[30.95/24]

if params[:role]
  @users = @search.result.where(:role => params[:role])
elsif params[:q] && params[:q][:s].include?('count')
  @users = @search.result.order(params[:q][:s])
else
  @users = @search.result
end

如何解决?有人有好主意吗?

4

1 回答 1

15

ABC 大小[ 1] [2]

通过计算一段代码的分配、分支和条件的数量来计算。原始 C++ 报告文章中的计数规则专门针对 C、C++ 和 Java 语言。

前面的链接详细说明了 A、B 和 C 的重要性。ABC 大小是一个标量大小,让人想起三角关系:

|ABC| = sqrt((A*A)+(B*B)+(C*C))

实际上,一个关于错误的快速谷歌显示第一个索引页面是呈现该消息的方法的 Rubocop 文档

触发警告时,您的存储库或分析工具将定义阈值数量。

计算,如果你喜欢自残....

您的代码计算为

(1+1+1)^2  + 
(1+1+1+1+1+1+1+1+1+1+1+1+1)^2   + 
(1+1+1+1)^2 
=> 194 

那是一个“盲目”的计算,我用我的值(1s)。但是,您可以看到错误状态的数字现在可能作为您的 ABC 和阈值有意义:

 [30.95/24]

所以警察门槛是24,你ABC size30.95。这告诉我们,rubocop 引擎为 A、B 和 C 分配了不同的数字。同样,不同的种类或分配(或 B 或 C)也可能有不同的值。例如,“正常”作业x = y的得分可能低于链式作业x = y = z = r

tl;博士回答

至此,您可能对如何减小 ABC 大小有了相当清晰的认识。如果不:

  1. 一种简单的方法来获取用于您的条件elsif并将其放置在辅助方法中。
  2. 由于您正在分配一个@变量,并且主要从一个变量调用,因此您的代码不使用内存封装。因此,您可以将两者移动ifelsif阻止操作到各自的load_search_users_by_role方法load_search_users_by_order中。
于 2016-01-09T04:35:17.183 回答