2015-06-19 19 views
47

Trong ứng dụng Rails của tôi, tôi sử dụng Rubocop để kiểm tra sự cố. Hôm nay nó đã cho tôi một lỗi như thế này: Assignment Branch Condition size for show is too high. Đây là mã của tôi:Điều gì có nghĩa là 'Kích thước điều kiện chi nhánh chuyển nhượng quá cao' và cách khắc phục?

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 

Điều này có nghĩa là gì và cách khắc phục?

+6

Một phát hiện ra tìm kiếm ngắn [này] (http://c2.com/cgi/wiki?AbcMetric). Đó là cách nói chính thức của "rubocop" là "phương pháp của bạn quá nhiều". –

+0

Tất cả các biến được xác định có được sử dụng trong kết xuất không? –

Trả lời

49

Chi nhánh chuyển nhượng Điều kiện (ABC) kích thước là phép đo kích thước của phương pháp. Về cơ bản, nó được xác định bằng cách đếm số lượng các số A ssignments, B trang trại và C báo cáo bổ sung. (more detail..)

Để giảm kích thước ABC, bạn có thể di chuyển một số những bài tập vào cuộc gọi 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 
+0

Xin cảm ơn. Bây giờ mã trông rất dễ đọc nhưng không phải là nó làm cho tệp lớn? Thêm mã? Liệu nó có tốt không? – THpubs

+0

Ít mã hơn nếu bạn cần các biến đó trong các hành động khác. –

+0

Cảm ơn sự giám sát. :) –

Các vấn đề liên quan