2015-06-19 43 views
47

Nella mia app Rails, utilizzo Rubocop per verificare eventuali problemi. Oggi mi ha dato un errore come questo: Assignment Branch Condition size for show is too high. Ecco il mio codice:Cosa si intende per "Dimensioni della condizione di assegnazione assegnazione troppo alta" e come risolverlo?

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 

Che cosa significa e come posso risolvere il problema?

+6

A breve scopre di ricerca [questo] (http://c2.com/cgi/wiki?AbcMetric). È un modo formale di "rubocop" per dire "il tuo metodo fa troppo". –

+0

Nel rendering vengono utilizzate tutte le variabili definite? –

risposta

49

Le dimensioni della condizione di assegnazione (ABC) sono una misura delle dimensioni di un metodo. È determinato essenzialmente contando il numero di A ssignments, B ranch, e C dichiarazioni secondarie. (more detail..)

Per ridurre le dimensioni di ABC, si potrebbe spostare alcuni di questi compiti in chiamate 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

Grazie mille. Ora il codice sembra molto leggibile, ma non sta rendendo il file di grandi dimensioni? Altro codice? È buono? – THpubs

+0

Meno codice se hai bisogno di quelle variabili in altre azioni. –

+0

Grazie per l'esame. :) –