“分配分支条件大小太大”是什么意思,如何解决?


112

在我的Rails应用程序中,我Rubocop用来检查问题。今天它给了我这样的错误:Assignment Branch Condition size for show is too high。这是我的代码:

def show
  @category = Category.friendly.find(params[:id])
  @categories = Category.all
  @search = @category.products.approved.order(updated_at: :desc).ransack(params[:q])
  @products = @search.result.page(params[:page]).per(50)
  rate
end

这是什么意思,我该如何解决?


9
简短搜索即可发现这一点。这是rubocop的正式说法,“您的方法做得太多”。
D端

是否在渲染中使用了所有定义的变量?
Antarr Byrd

Answers:


114

分配分支条件(ABC)大小是方法大小的度量。它基本上是通过计算A派遣,B分支和C附加语句的数量来确定的。 (更多详情..)

为了降低ABC分数,您可以将其中一些分配移至before_action调用中:

before_action :fetch_current_category, only: [:show,:edit,:update] 
before_action :fetch_categories, only: [:show,:edit,:update] 
before_action :fetch_search_results, only: [:show,:edit,:update] #or whatever

def show
  rate
end

private

def fetch_current_category
  @category = Category.friendly.find(params[:id])
end

def fetch_categories
  @categories = Category.all
end

def fetch_search_results
  @search = category.products.approved.order(updated_at: :desc).ransack(params[:q])
  @products = @search.result.page(params[:page]).per(50)
end

1
十分感谢。现在,代码看起来更具可读性,但这不是使文件很大吗?更多代码?好吗?
THpubs 2015年

如果您在其他操作中需要这些变量,则代码更少。
chad_ 2015年

2
谢谢。我把它指向了维基百科。我希望那应该更可靠。
chad_

我在此方法上得到了相同的结果:#将球绘制到此设备上下文中def draw(dc)dc.setForeground(color)dc.fillArc(x,y,w,h,0,64 * 90)dc.fillArc( x,y,w,h,64 * 90,64 * 180)dc.fillArc(x,y,w,h,64 * 180,64 * 270)dc.fillArc(x,y,w,h,64 * 270,64 * 360)结束我似乎无法在此处保留代码块的布局!!!这里发生了什么?这里根本没有作业,没有分支,也没有条件!!!!
flajann

在将数字相乘的位置,您具有隐式分配。我将它们带到常量中,这样您就不会在这些调用中重新评估相同的算法。我不确定这是否可以解决您的短毛猫的反馈意见,但肯定会清除一点点。:)
chad_
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.