Điều gì có nghĩa là 'Kích thước tình trạng chi nhánh nhiệm vụ quá cao' và cách khắc phục nó?


112

Trong ứng dụng Rails của mình, tôi sử dụng Rubocopđể kiểm tra các 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:

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à tôi có thể sửa chữa nó như thế nào?


9
Một cuộc tìm kiếm ngắn đã khám phá ra điều này . Đó là một rubocopcách chính thức để nói "phương pháp của bạn làm quá nhiều".
D-side

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

Câu trả lời:


114

Kích thước của Điều kiện nhánh (ABC) là phép đo kích thước của một phương pháp. Về cơ bản, nó được xác định bằng cách đếm số lượng lô hàng A , bảng xếp hạng B và câu lệnh điều kiện C. (chi tiết hơn ..)

Để giảm điểm ABC, bạn có thể chuyển một số bài tập đó vào lệnh 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

1
Cảm ơn rất nhiều. Bây giờ mã trông có thể đọc được nhiều nhưng nó không làm cho tệp lớn? Thêm mã? Liệu nó có tốt không?
THpubs

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

2
Cảm ơn. Tôi đã chỉ nó vào Wikipedia. Tôi hy vọng điều đó sẽ đáng tin cậy hơn một chút.
chad_

Tôi cũng nhận được điều tương tự trên phương pháp này: # Vẽ quả bóng vào ngữ cảnh thiết bị này 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 Tôi dường như không thể duy trì bố cục khối mã ở đây !!! Chuyện gì đang xảy ra ở đây? Không có nhiệm vụ, không có chi nhánh, và không có điều kiện nào ở đây cả !!!!
flajann

Bạn có nhiệm vụ ngầm hiểu là bạn đang nhân các số. Tôi sẽ lấy chúng và chuyển chúng sang hằng số để bạn không phải đánh giá lại cùng một số học trong các lệnh gọi đó. Tôi không chắc liệu điều này có khắc phục được phản hồi của người bán hàng không nhưng chắc chắn nó sẽ làm sạch nó một chút. :)
chad_
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.