6

मैं की तरह एक मॉडल सेटअप मिल गया है निम्नलिखित:Default_scope

user.words 
:

class User 
    has_many :items 
    has_many :words, :through => :items 
end 

class Item 
    belongs_to :user 
    belongs_to :word 

    default_scope where(:active => true) 
end 

class Words 
    has_many :items 
end 
समस्या मैं आ रही हैं कि default_scope निम्न संबद्धता के लिए लागू नहीं किया जा रहा है

SELECT `words`.* FROM `words` INNER JOIN `items` ON `words`.id = `items`.word_id WHERE ((`items`.user_id = 1)) AND ((`items.active = 1)) 

मैं लॉग में यह एसक्यूएल मिलती है:: इस एसक्यूएल के बजाय

SELECT `words`.* FROM `words` INNER JOIN `items` ON `words`.id = `items`.word_id WHERE ((`items`.user_id = 1)) 

मुझे ऐसा लगता है क्योंकि डिफ़ॉल्ट क्षेत्र नियमित मॉडल और उसके बाल संघ के लिए काम करता है, लेकिन तालिका में शामिल होने के लिए नहीं।

एसोसिएशन के बीच काम करने के लिए जॉइन टेबल स्कोप प्राप्त करने के लिए सही रेल तरीका क्या है इसे निर्दिष्ट किए बिना? क्या कोई अस्तित्व में है?

उत्तर

10

# रूबी-ऑन-रेल से डीएफआर की मदद से उत्तर का पता लगाया।

has_many :words, :through => :items, :conditions => { "items.active" => true } 

इसका कारण यह है, यद्यपि वहाँ है एक habtm उपयोगकर्ता और वचन के बीच संघ में शामिल होने, मद मॉडल वास्तव में लोड नहीं है user.words है जब:

उपयोगकर्ता कक्षा में, होने के लिए has_many संबंध सेट बुलाया। इसलिए आपको उपयोगकर्ता मॉडल के भीतर एसोसिएशन पर दायरा लागू करना होगा।

उम्मीद है कि किसी की मदद की।

2

धन्यवाद यह सहायक है। यह टिकट (हालांकि अमान्य) लोगों ने भी इस पर चर्चा की है: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/3610-has_many-through-associations-may-not-respect-default_scope-conditions#ticket-3610-17

व्यक्तिगत रूप से, मुझे लगता है कि यह टिकट अमान्य नहीं है। डिफ़ॉल्ट दायरा डिफ़ॉल्ट दायरा है।

+0

मैं सहमत हूं। लगता है कि एक एसोसिएशन कहलाता है जब शामिल मॉडल लोड किया जाना चाहिए। मुझे लगता है कि यह अनुकूलन के लिए नहीं है। हालांकि, मुझे लगता है कि उपयोगकर्ता मॉडल में has_many विधि को बस बंद करने के बजाय, उस मॉडल को शामिल करने के लिए शामिल मॉडल सही जगह है। – joeellis

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

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