sql - In Rails, how can you use a .where('rooms.id not in (?), ____), when ____ doesn't return anything? -
कक्षा कक्ष & lt; ActiveRecord :: बेस is_to: होटल में संबंधित है: लेआउट has_many: विज़िट मान्य हैं: नंबर, उपस्थिति: सही पुष्टि: दर, उपस्थिति: सच # मान्यताओं: धूम्रपान, उपस्थिति: सही डीआरएफ़ self.occupied_rooms (से _डेट, टू_डेट) # 24-26 आत्म जोड़ता है (: विज़िट्स)। जहां ('तिथि & gt; =? और तिथि & lt; =?', से-डेट, टू-डेट) .युइनक अंत डीईफ़ self.vacant_rooms (से _date, to_date) self.where ('rooms.id नहीं में (? ) ',' रूम '। कॉक्यूप्ड_रूम (से _डेट, टू_डेट)। चयन (: आईडी) .to_a) अंत डीईफ़ self.find_rooms_with (occupancy_count, smoking, from_date, to_date) Room.vacant_rooms (from_date, to_date) .joins (: layout) .where ('Occupancy_count & gt; =', occupancy_count)। जहां ('धूम्रपान =?', धूम्रपान) अंत का अंत
विधि vacant_rooms काम नहीं करती है, जब कब्जे वाले कमरों में कुछ भी रिटर्न नहीं होता है।
उदाहरण के लिए, मान लें कि एक कमरा अप्रैल 29 को बुक हो गया है। और हम अप्रैल 28-30 के बीच कब्जे वाले कमरे ढूंढना चाहते हैं। यह कब्जे वाले कमरे में वापस आने तक Vacant_rooms सभी कमरों को रिटर्न देता है लेकिन हमारे एक कमरे में बुक किया जाता है।
हालांकि, अगर हम उदाहरण 1-3 के बीच 1-3 के बीच रिक्त_रूम की कोशिश करते हैं, तो यह कुछ भी वापस नहीं आएगा, क्योंकि कब्जे वाले कमरे कुछ भी नहीं लौट रहे हैं और यह पसंद नहीं है ...
स्वयं। जहां ('rooms.id नहीं (?)', रूम.कुक्यूड_रूम (से_डेट, टू_डेट)। चयन (: आईडी) .to_a) ऐसा करने का उचित तरीका क्या है?
एक बहुत अच्छा है चीजें जो रेल 4 में शुरू हुई थी, जिसे जहां चेन
कहा जाता है आप इसे इस तरह से उपयोग कर सकते हैं:
self.where.not (id: Room.occupied_rooms (से _date, to_date) .select (: id))
हालांकि मुझे पूरा यकीन है कि इससे भी सरल हो सकता है:
self.where.not (id: Room.occupied_rooms (from_date, to_date))
< / div>
Comments
Post a Comment