'Atama Şubesi Koşul Boyutu çok yüksek' ile ne kastedilmektedir ve nasıl düzeltilir?


113

Rails uygulamamda Rubocopsorunları kontrol etmek için kullanıyorum . Bugün bana böyle bir hata verdi: Assignment Branch Condition size for show is too high. İşte kodum:

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

Bu ne anlama geliyor ve bunu nasıl düzeltebilirim?


9
Kısa bir arama ortaya çıkarır bu . Bu rubocop, "yönteminizin çok fazla işe yaradığını" söylemenin resmi bir yolu.
D tarafı

Oluşturmada tanımlanan tüm değişkenler kullanılıyor mu?
Antarr Byrd

Yanıtlar:


115

Atama Dal Koşulu (ABC) boyutu, bir yöntemin boyutunun bir ölçüsüdür. Esasen A işaretlerinin, B çiftliklerinin ve C ek ifadelerinin sayılmasıyla belirlenir . (daha fazla detay..)

ABC puanını düşürmek için bu atamalardan bazılarını action çağrılarından önce taşıyabilirsiniz:

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
Çok teşekkürler. Şimdi kod çok okunabilir görünüyor, ancak dosyayı büyütmüyor mu? Daha fazla kod mu? İyi mi?
THpubs

Diğer işlemlerde bu değişkenlere ihtiyacınız varsa daha az kod.
chad_

2
Teşekkürler. Wikipedia'ya işaret ettim. Umarım bu biraz daha güvenilir olur.
chad_

Bu yöntemde de aynısını alıyorum: # Topu bu aygıta çek bağlam 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 Burada kod bloğu düzenini koruyamıyorum !!! Burada neler oluyor? Burada ödev yok, şube yok ve koşul yok !!!!
flajann

Sayıları çarptığınız yerde dolaylı olarak atamalarınız var. Onları alıp sabitlere taşırdım, böylece bu çağrılarda aynı aritmetiği yeniden değerlendirmezsiniz. Bunun linterinizin geri bildirimini düzeltip düzeltmeyeceğinden emin değilim ama kesinlikle onu biraz temizleyecektir. :)
chad_
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.