'Assignment Branch Condition Size สูงเกินไป' หมายถึงอะไรและจะแก้ไขได้อย่างไร


113

ในแอพ 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

คำตอบ:


115

Assignment Branch Condition (ABC) size คือการวัดขนาดของวิธีการ โดยพื้นฐานแล้วจะถูกกำหนดโดยการนับจำนวนA ssignments, B ranches และ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

โค้ดน้อยลงหากคุณต้องการตัวแปรเหล่านั้นในการดำเนินการอื่น ๆ
chad_

2
ขอบคุณ. ฉันชี้ไปที่ Wikipedia น่าจะน่าเชื่อถือกว่านี้หน่อยฉันหวังว่า
chad_

ฉันได้รับสิ่งเดียวกันกับวิธีนี้: # วาดลูกบอลลงในบริบทอุปกรณ์นี้ def draw (dc) dc.setForeground (สี) 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_
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.