Rails - Don't repeat yourself on scope definition -


यहां एक नमूना मॉडल है:

  class book & lt; एआर :: बेस है_माइं: पृष्ठों का दायरा: with_some_conditions, - & gt; (var) {जहां (... कुछ के साथ var ...) .जोखे (... कुछ शामिल हैं ...)} अंत वर्ग पृष्ठ & lt; & lt; एआर :: बेस # एटर्स: ए, बी (इंटिजर्स) संबंधित_तो: पुस्तक का दायरा: with_c, {select ("# {page.table_name}। *, (A + b) एएस सी")} def c; ए + बी; अंत  

मैं सबसे बड़ा c मान के साथ 10 पृष्ठों प्राप्त करने के लिए tring हूँ, पुस्तकों के अंतर्गत आता है कुछ शर्तों का सम्मान करना।

यह कोड काम कर रहा है:

  book.with_some_conditions ('foo')। नक्शा (और: पृष्ठ) .मैप (& amp; C) [0 ... 10]  

या बेहतर

  book.with_some_conditions ('foo')। शामिल हैं (: पृष्ठ) .मैप (& amp; ;: पृष्ठ) .मैप (& amp; c) [0 ... 10]  

अब कल्पना कीजिए कि c विधि एक साधारण विधि नहीं है < कोड> + , लेकिन यह एक मजबूत <सच> और अधिक जटिल कार्य है (मिलकर और कुछ अन्य चीजों के साथ) इस कोड को बस संभवतः अनोपिटिमाइज़ किया गया है ... सभी c को रेल में गणना और आदेशित किया जाना चाहिए ... एसक्यूएल उपयोगी हो सकता है।

पेज < / कोड> मॉडल मैंने पाया बेहतर उपाय है:

  गुंजाइश: बड़ा_सस्कोप, - & gt; (var) {joins (: पुस्तक)। जहां (... var के साथ कुछ ...) # 2 लाइनें बुक मॉडल से सी / पी हैं .जंम (... कुछ शामिल हैं ...)। चयन ("# {page.table_name}। *, (A + b) AS c")}  

फिर, कॉल Page.big_scope ('foo')। आदेश (: c = & gt;: desc) पूरी तरह से काम करता है।

समस्या यह है कि मैं खुद को दोहरा रहा हूं: पूर्ण गुंजाइश 2 बार अलग-अलग वर्गों में 2 बार लिखी गई है।

  .where (... var के साथ कुछ ...) .जोम (... कुछ मिलते हैं .. ।  

"पोस्ट-टेक्स्ट" आइटमप्रॉप = "टेक्स्ट">

यहां मानक मॉड्यूल 'टेम्पलेट' का उपयोग किया जाता है, यदि मैं दो या अधिक कक्षाओं के बीच तरीकों को साझा करना चाहता हूं।

  module M YModule def self.included (base) base.extend (classmethods) base.class_eval #sociations, कॉलबैक, स्कोप, वैधानिकता इत्यादि अंत में अंत हो जाती हैं #instance विधियां यहां जाएं मॉड्यूल क्लासमैथिस # वर्ग विधियां यहां अंत समाप्ति पर जाएं  < / प्री> 

Comments

Popular posts from this blog

sqlite3 - UPDATE a table from the SELECT of another one -

c# - Showing a SelectedItem's Property -

javascript - Render HTML after each iteration in loop -