दिलचस्प पोस्ट
रॉ पोस्ट PHP में curl का उपयोग कर PHP: किसी रेंज में सभी महीनों के दौरान लूप? सी # में स्ट्रिंग एक संदर्भ प्रकार है जो मूल्य प्रकार की तरह व्यवहार करता है? स्क्रीन के सटीक मध्य कैसे प्राप्त करें, फिर भी जब फिर से आकार बदल जाता है XAML XML रनटाइम के माध्यम से लोड हो रहा है? स्पार्क एसक्यूएल में कस्टम टाइप के लिए स्कीमा को कैसे परिभाषित करें? जब नोडलिस्ट रहते हैं और कब यह स्थिर है? पीछे कोड में सी # मेट्रो यूआई में डेटा टेम्पलेट के अंदर एक नियंत्रण तक कैसे पहुंचें foreach चेकबॉक्स पोस्ट में php 64-बिट एंड्रॉइड डिवाइस पर 32-बिट मूल पुस्तकालयों का उपयोग कैसे करें क्या एमकेएनेटेशनव्यू इसके इनपुट कतार को बफर करता है? संपर्क जानकारी को संशोधित करना ReactJS 'विकास मोड' को चालू / बंद कैसे करें? JPA / JAX-RS वेब सेवा में JAXBElement मान्य करें ActiveWorkbook तक प्रतीक्षा करें। रीफ़्रेश सभी समाप्त – VBA

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

रेल 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)" 

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

Solutions Collecting From Web of "जहां हालत नल का उपयोग करते हुए रेलगाड़ी रेल करता है"

रेल 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)