「割り当てブランチの条件サイズが大きすぎる」とはどういう意味ですか?


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 2015

回答:


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_

2
ありがとう。私はそれをウィキペディアに向けました。それはもう少し信頼できるはずです、私は願っています。
chad_ 2016年

私はこの方法でも同じようになっています:#このデバイスコンテキストにボールを描画します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)endここではコードブロックレイアウトを保持できないようです!!! ここで何が起こっているのですか?ここには割り当て、ブランチ、条件はありません!!!!
flajann 2017

数値を掛けるところに暗黙の割り当てがあります。それらを取得して定数に移動するので、これらの呼び出しで同じ算術を再評価しないでください。これがあなたのリンターのフィードバックを修正するかどうかはわかりませんが、それは確かにほんの少しそれをきれいにするでしょう。:)
chad_
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.