2015-06-19 8 views
47

मेरे रेल ऐप में, मैं समस्याओं की जांच के लिए 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 

इसका क्या अर्थ है और मैं इसे कैसे ठीक कर सकता हूं?

+6

एक संक्षिप्त खोज Uncovers [इस] (http://c2.com/cgi/wiki?AbcMetric)। यह कहने का एक 'रूबोकॉप' का औपचारिक तरीका है "आपकी विधि बहुत अधिक है"। –

+0

क्या सभी परिभाषित चर प्रतिपादन में उपयोग किए जाते हैं? –

उत्तर

49

असाइनमेंट शाखा शर्त (एबीसी) आकार एक विधि के आकार का माप है। यह ssignments, बी ranches, और सी सामान्य विवरणों की गणना करके अनिवार्य रूप से निर्धारित किया जाता है। (more detail..)

एबीसी आकार को कम करने के लिए, आपको 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

ग्रेट धन्यवाद। अब कोड बहुत पठनीय दिखता है लेकिन क्या यह फ़ाइल को बड़ा नहीं बना रहा है? अधिक कोड? अच्छी है? – THpubs

+0

कम कोड यदि आपको अन्य कार्यों में उन चरों की आवश्यकता है। –

+0

जांच के लिए धन्यवाद। :) –

संबंधित मुद्दे