'할당 분기 조건 크기가 너무 큼'은 무엇을 의미하며 어떻게 해결합니까?


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-side

정의 된 모든 변수가 렌더링에 사용됩니까?
Antarr Byrd 2015-06-19

답변:


114

ABC (Assignment Branch Condition) 크기는 분석법의 크기를 측정 한 것입니다. 본질적으로 A ssignments, B ranches 및 C onditional 진술 의 수를 세어 결정됩니다 . (자세한 세부 사항..)

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-06-20

다른 작업에서 해당 변수가 필요한 경우 코드가 적습니다.
chad_

2
감사. 나는 그것을 Wikipedia에 지적했다. 좀 더 신뢰할 수 있어야합니다.
chad_ 2016-10-13

나는이 방법에 대해 똑같이 얻고있다 : #이 장치 컨텍스트에 공을 그립니다. 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) end 여기서 코드 블록 레이아웃을 유지할 수없는 것 같습니다 !!! 여기서 무슨 일이 일어나고 있습니까? 여기에는 할당, 분기 및 조건이 전혀 없습니다 !!!!
flajann

숫자를 곱하는 위치에 암시적인 할당이 있습니다. 나는 그것들을 가져다가 상수로 옮길 것이므로 그 호출에서 동일한 산술을 재평가하지 않을 것입니다. 이것이 당신의 linter의 피드백을 고칠 지 확신하지 못하지만 확실히 약간을 정리할 것입니다. :)
chad_ 2017-04-12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.