दिलचस्प पोस्ट
जावास्क्रिप्ट का उपयोग कर ब्राउज़र में मैं वर्ड डॉक्यूमेंट (.doc, .docx) कैसे प्रस्तुत करूं? मैं वर्चुअलवेव में पीथोनपाथ के लिए एक पथ कैसे जोड़ूं? सेट कस्टम फ़ॉन्ट के लिए कस्टम फ़ॉन्ट के साथ मेमोरी लीक जावा में एनोटेशन कैसे और कहाँ हैं? PowerShell का उपयोग कर FTP के साथ फाइल अपलोड करें WPF: एक प्रतिशत मूल्य के रूप में चौड़ाई (और ऊँचाई) सेट करना मैं .gitconfig में खुद के लिए एकाधिक उपयोगकर्ताओं को निर्दिष्ट कर सकता हूँ? AngularJS गतिशील रूटिंग आरजीबी रंग की चमक निर्धारित करने के लिए फॉर्मूला EntityFramework कोड-पहले कस्टम कनेक्शन स्ट्रिंग और माइग्रेशन एमपीआई में आउटपुट का ऑर्डर देना पायथन डिक्शनरी: प्रकार एरर: अबाईबल प्रकार: 'सूची' समाशोधन NSUserDefaults निकालने () के साथ क्या गलत है? कैसे जांचें कि निम्न सभी आइटम सूची में हैं या नहीं?

जहां हालत नल का उपयोग करते हुए रेलगाड़ी रेल करता है

रेल 3 शैली का उपयोग मैं इसके विपरीत कैसे लिखूंगा:

Foo.includes(:bar).where(:bars=>{:id=>nil}) 

मुझे पता लगाना है कि आईडी कहाँ नहीं है I मैंने कोशिश की:

 Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql 

लेकिन वह रिटर्न:

 => "SELECT \"foos\".* FROM \"foos\" WHERE (\"bars\".\"id\" = 1)" 

यह निश्चित रूप से नहीं है कि मुझे क्या चाहिए, और लगभग एआरएल में एक बग की तरह लगता है

वेब के समाधान से एकत्रित समाधान "जहां हालत नल का उपयोग करते हुए रेलगाड़ी रेल करता है"

रेल 3 के साथ ऐसा करने का वैधानिक तरीका:

 Foo.includes(:bar).where("bars.id IS NOT NULL") 

ActiveRecord 4.0 और इसके बाद के संस्करण कहते हैं, where.not इसलिए आप यह कर सकते हैं:

 Foo.includes(:bar).where.not('bars.id' => nil) Foo.includes(:bar).where.not(bars: { id: nil }) 

मैं अब इसके लिए सक्ेल का उपयोग करने की अनुशंसा नहीं करता क्योंकि यह हमेशा एक पूर्णकालिक संरक्षक नहीं होता है, और यह प्रायः निजी एपीआई पर निर्भर करता है जो अक्सर टूटने वाले परिवर्तनों के कारण होता है।

यह एआरएल में एक बग नहीं है, यह आपके तर्क में एक बग है।

आप यहां क्या चाहते हैं:

 Foo.includes(:bar).where(Bar.arel_table[:id].not_eq(nil)) 

रेल 4 के लिए:

तो, जो आप चाह रहे हैं वह एक आंतरिक सम्मिलन है, इसलिए आप वास्तव में सिर्फ जुड़ने का उपयोग करना चाहिए:

  Foo.joins(:bar) Select * from Foo Inner Join Bars ... 

लेकिन, रिकॉर्ड के लिए, यदि आप चाहते हैं कि "नल नल" हालत में केवल इसका मतलब नहीं है कि इसका मतलब है:

 Foo.includes(:bar).where.not(bars: {id: nil}) Select * from Foo Left Outer Join Bars on .. WHERE bars.id IS NOT NULL 

ध्यान दें कि यह सिंटैक्स एक बहिष्कार की रिपोर्ट करता है (यह स्ट्रिंग एसक्यूएल स्निपेट के बारे में बात करता है, लेकिन मुझे लगता है कि हैश की स्थिति पार्सर में बदल जाती है?), तो इस संदर्भ को अंत तक जोड़ना सुनिश्चित करें:

 Foo.includes(:bar).where.not(bars: {id: nil}).references(:bar) 

प्रत्यावर्तन चेतावनी: ऐसा लगता है कि आप उत्सुक लोडिंग तालिका (एक: …. में से हैं) जो स्ट्रिंग एसक्यूएल स्निपेट में संदर्भित हैं। उदाहरण के लिए:

 Post.includes(:comments).where("comments.title = 'foo'") 

वर्तमान में, सक्रिय रिकॉर्ड स्ट्रिंग में तालिका को पहचानता है, और एक अलग क्वेरी में टिप्पणियां लोड करने के बजाय क्वेरी तालिका में शामिल होने के लिए जानता है हालांकि, एक पूर्ण विकसित एसक्यूएल पार्सर लिखने के बिना ऐसा कर स्वाभाविक रूप से दोषपूर्ण है। चूंकि हम किसी SQL पार्सर को लिखना नहीं चाहते हैं, इसलिए हम इस कार्यक्षमता को निकाल रहे हैं। अब से, जब आप एक स्ट्रिंग से तालिका को संदर्भित कर रहे हैं, तो आपको स्पष्ट रूप से सक्रिय रिकॉर्ड बताएगा:

 Post.includes(:comments).where("comments.title = 'foo'").references(:comments) 

रेल 4 के साथ यह आसान है:

  Foo.includes(:bar).where.not(bars: {id: nil}) 

यह भी देखें: http://guides.rubyonrails.org/active_record_querying.html#not-conditions

यह सुनिश्चित नहीं है कि यह उपयोगी है लेकिन यह रेल 4 में मेरे लिए क्या काम किया

 Foo.where.not(bar: nil)