Is असाइनमेंट ब्रांच कंडीशन साइज़ हाई ’का क्या अर्थ है और इसे कैसे ठीक किया जाए?


112

मेरे रेल एप्लिकेशन में, मैं 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- साइड

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

जवाबों:


114

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

एबीसी स्कोर को कम करने के लिए, आप उन असाइनमेंटों में से कुछ को पहले_संक्रमण कॉल में स्थानांतरित कर सकते हैं:

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
बहुत धन्यवाद। अब कोड बहुत पठनीय लगता है लेकिन क्या यह फ़ाइल को बड़ा नहीं बना रहा है? अधिक कोड? अच्छी है?
थप्पड़

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

2
धन्यवाद। मैंने इसे विकिपीडिया की ओर इशारा किया। मुझे थोड़ा और विश्वसनीय होना चाहिए, मुझे उम्मीद है।
chad_ 22

मुझे इस विधि पर समान मिल रहा है: # इस डिवाइस के संदर्भ में गेंद को ड्रा करें ड्रॉ ड्रा (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) अंत मैं कोड ब्लॉक लेआउट को संरक्षित करने में सक्षम प्रतीत नहीं होता है !!! यहाँ क्या हो रहा है? यहाँ कोई असाइनमेंट, कोई शाखा और कोई शर्त नहीं है !!!!
फ्लैजेन

आपके पास असाइनमेंट निहित हैं जहां आप संख्याओं को गुणा कर रहे हैं। मैं उन्हें ले जाता और उन्हें स्थिरांक में ले जाता ताकि आप उन कॉल में समान अंकगणित का पुनर्मूल्यांकन नहीं कर रहे होते। मुझे यकीन नहीं है कि अगर यह आपके लिंटर की प्रतिक्रिया को ठीक कर देगा, लेकिन यह निश्चित रूप से इसे थोड़ा सा साफ करेगा। :)
चाड_
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.