2015-06-19 13 views
47

In meiner Rails-App verwende ich Rubocop, um nach Problemen zu suchen. Heute hat es mir einen solchen Fehler gegeben: Assignment Branch Condition size for show is too high. Hier ist mein Code:Was ist mit "Zuordnungs-Verzweigungsbedingung Größe zu hoch" gemeint und wie man es beheben kann?

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 

Was bedeutet das und wie kann ich es beheben?

+6

Eine kurze Suche deckt auf [diese] (http://c2.com/cgi/wiki?AbcMetric). Es ist eine "rubocop" formale Art zu sagen "Ihre Methode tut zu viel". –

+0

Werden alle definierten Variablen im Rendering verwendet? –

Antwort

49

Die Größe der Zuordnungszweigbedingung (ABC) ist ein Maß für die Größe einer Methode. Sie wird im wesentlichen bestimmt durch Zählen der Anzahl der Standardauszüge, wobei die Anzahl der A Einheiten, B ranches und C bestimmt wird. (more detail..)

ABC Größe zu reduzieren, können Sie einige dieser Aufgaben in before_action Anrufe bewegen konnte:

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

Vielen Dank. Jetzt sieht der Code gut lesbar aus, aber macht es die Datei nicht groß? Mehr Code? Ist es gut? – THpubs

+0

Weniger Code, wenn Sie diese Variablen in anderen Aktionen benötigen. –

+0

Danke für die Überprüfung. :) –