2015-07-09 5 views
5

मैं रेल 4.2.3 और गहरे लाल रंग का 2.2.1find_by 2 फायरिंग कर रहा है प्रश्नों

मैं इस प्रकार की भूमिका निभाने के मॉडल में एक गुंजाइश लिखा है उपयोग कर रहा हूँ:

एप्लिकेशन/मॉडल/role.rb

scope :default, -> { find_by(default: true) } 

अब जब मैं

> Role.default 

#this is the output I got. 

Role Load (0.1ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`default` = 1 LIMIT 1 
Role Load (0.1ms) SELECT `roles`.* FROM `roles` 
=> [] 

चलाने आप देख सकते हैं यह 2 प्रश्नों आग और गलत परिणाम देता है।

मैं कक्षा विधि के बजाय का दायरा

def self.default 
    self.find_by(default: true) 
end 

साथ की कोशिश की अब जब मैं

Role.default 

#this is the output I got 

Role Load (0.2ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`default` = 1 LIMIT 1 
=> nil 

चलाने के साथ वर्ग विधि find_by ठीक से काम कर रहा है।

मुझे समझ में नहीं आता कि मैं यहां क्या गलत कर रहा हूं। किसी भी सहायता की सराहना की जाएगी। अग्रिम में धन्यवाद।

उत्तर

7

आपको find_by का उपयोग किसी दायरे के अंदर नहीं करना चाहिए - find_by वास्तव में डेटाबेस क्वेरी निष्पादित करता है।

आपको केवल उन विधियों का उपयोग करना चाहिए जो आगे के क्षेत्रों को वापस कर दें, उदाहरण के लिए where, limit, order और इसी तरह।

3

ActiveRecord, रेल में निर्मित ऑब्जेक्ट रिलेशनल मैपिंग सिस्टम, आपको डेटाबेस स्कॉल्स को सारणीबद्ध करने के लिए अपने स्कॉप्स में उपयोग करने के तरीकों का एक सेट प्रदान करता है। इन तरीकों में यहाँ सूचीबद्ध हैं:

http://guides.rubyonrails.org/active_record_querying.html#retrieving-objects-from-the-database

आपके मामले में, आप where क्वेरी का उपयोग करना चाहते हैं।

scope :default, -> { where(default: true) }

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