मैं रूबी 3.2.2 पर रूबी का उपयोग कर रहा हूं और मैं उन संबंधित वस्तुओं पर एक विशेषता मान "निर्दिष्ट"/"फ़िल्टरिंग" द्वारा संबंधित ऑब्जेक्ट्स को पुनर्प्राप्त/स्कोप करना चाहता हूं। यही कारण है, इस समय मैं निम्नलिखित कोड का उपयोग कर रहा:दो अलग-अलग वर्गों में उपयोग की जाने वाली स्कोप विधियों को कैसे ड्रॉ करें?
class Article < ActiveRecord::Base
def self.search_by_title(search)
where('articles.title LIKE ?', "%#{search}%")
end
end
class ArticleAssociation < ActiveRecord::Base
def self.search_by_article_title(search)
joins(:article).where('articles.title LIKE ?', "%#{search}%")
end
end
उपरोक्त कोड में where('articles.title LIKE ?', "%#{search}%")
खंड दो बार दोहराया है और इसलिए मैंने सोचा कि यह सूखी सिद्धांत के साथ सुधार किया जा सकता है: यह संभव है उपयोग करने के लिएArticle.search_by_title
विधि सीधेArticleAssociation.search_by_article_title
विधि में विधि?
विशिष्ट उपयोग के मामलों रहे हैं:
ArticleAssociation.search_by_article_title("Sample string")
Article.search_by_title("Sample string")
मुझे एक परियोजना (4 संबंधित मॉडल) में इसी स्थिति का सामना करना पड़ा और मैंने सामान्य खोज विधियों को रखने के लिए एक मॉड्यूल बनाया। यूट बिल्कुल ठीक नहीं है जो आप पूछते हैं लेकिन यह एक सामान्य समाधान है। – tokland
कक्षाओं के बीच साझा कोड आमतौर पर मॉड्यूल – apneadiving
में मॉड्यूल में समाप्त होता है, स्क्वायर के सिफ्टर्स का उपयोग इस पर किया जा सकता है, लेकिन एआर के बजाय स्क्वायर का उपयोग करना एक बड़ा बदलाव है .. https://github.com/ernie/squeel#sifters – tokland