2010-01-11 12 views
18

ठीक है, मैं उत्सुक लोड हो रहा है चीजों में से कुछ के साथ चारों ओर खेल रहा है, और 2 मॉडल की तरह कुछ है:रेल सभी पर उत्सुक लोड हो रहा है ढूँढता

Class Recipe < ActiveRecord::Base 
    belongs_to :cookbook 
    has_many :recipetags 
end 

और

Class Cookbook < ActiveRecord::Base 
    has_many :recipes, :include => [:recipetags] 
end 

कौन सा काम कर रहा है बाहर अच्छी तरह से, जब मैं एक कुकबुक, तो मैं उत्सुक लोड व्यंजनों, और बदले में व्यंजनों उत्सुक लोड लगता है: recipetags:

cb = Cookbook.find(10590, :include => [:recipes]) 

लेकिन क्या मैं चाहता हूँ भी जब भी मैं एक नुस्खा खोलने जाता है, चूंकि उन सभी में खींच है स्वचालित रूप से उत्सुक संघों है करने के लिए - मूल रूप से मैं क्या करना चाहते हैं:

rec = Recipe.find(123) 

और यह उत्सुक लोड: recipetags उस मामले में के रूप में अच्छी तरह से ।

मुझे एहसास हुआ कि यह मामूली लगता है, लेकिन वास्तविकता में मेरे पास पकाने की विधि पर लगभग 4-5 संघ हैं, मैं उन्हें यहां नहीं दिखा रहा हूं, और स्पष्ट रूप से ऐसा करने के बजाय: प्रत्येक खोज कॉल को शामिल करना चाहता हूं यह बस होने के लिए। मुझे लगता है कि मैं पकाने की विधि को ओवरराइड कर सकता हूं। इसे पकाने की विधि में करने के लिए ढूंढें, लेकिन यह सोच रहा था कि कोई क्लीनर तरीका है ....

उत्तर

33

मैं चुनिंदा मॉडल में जहां मैं हमेशा उत्सुक लोड करना चाहते हैं पर यह करने के लिए default_scope उपयोग कर रहे हैं:

class Post < ActiveRecord::Base 
    has_many :comments 
    default_scope :include => :comments, :order => ["title ASC"] 
    ... 
end 
+0

यह अच्छा लग रहा है - हालांकि ऐसा लगता है कि यह 2.3+ में ही उपलब्ध है, जो कुछ अन्य समस्याओं की शुरुआत की ऐप में मैं देखूंगा कि क्या मैं 2.3.2 काम कर सकता हूं और इसका परीक्षण कर सकता हूं। –

+1

यह कमाल है :) +1 – abhijit

0

आपको नामित स्कॉप्स के साथ ऐसा करने में सक्षम होना चाहिए, लेकिन मैं समझता हूं इसके साथ कई संभावित बग थे, उम्मीद है कि वे अब तय हो गए हैं।

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