जवाबों:
रेल में 4.x ( http://edgeguides.rubyonrails.org/active_record_querying.html#not-conditions देखें )
GroupUser.where.not(user_id: me)
रेल में 3.x
GroupUser.where(GroupUser.arel_table[:user_id].not_eq(me))
लंबाई को छोटा करने के लिए, आप GroupUser.arel_table
एक चर में स्टोर कर सकते हैं या यदि मॉडल के अंदर GroupUser
स्वयं scope
का उपयोग कर सकते हैं जैसे, ए में , आप arel_table[:user_id]
इसके बजाय उपयोग कर सकते हैंGroupUser.arel_table[:user_id]
@ Jbearden के उत्तर के लिए 4.0 सिंटैक्स क्रेडिट का पालन करता है
GroupUser.where(other_condition: true).where.not(user_id: user_id)
एकमात्र तरीका जिसे आप पा सकते हैं, वह मेटावेयर के साथ है ।
MetaWhere एक नए चचेरे भाई जो कहा जाता है है Squeel जो इस तरह कोड की अनुमति देता है:
GroupUser.where{user_id != me}
यह बिना कहे चला जाता है, कि अगर यह एकमात्र प्रतिक्षेपक है जिसे आप बनाने जा रहे हैं, तो यह एक मणि का उपयोग करने के लायक नहीं है और मैं सिर्फ उसी चीज़ के साथ रहूँगा जो आपको मिला था। स्क्वील उन स्थितियों में उपयोगी है जहां आपके पास रूबी कोड के साथ बातचीत करने वाले कई जटिल प्रश्न हैं।
रेल 4:
यदि आप समान और समान दोनों का उपयोग नहीं करना चाहते हैं , तो आप उपयोग कर सकते हैं:
user_id = 4
group_id = 27
GroupUser.where(group_id: group_id).where.not(user_id: user_id)
(। यानी आप ऑपरेटरों की एक किस्म का उपयोग करना चाहते हैं >
, <
), कुछ बिंदु पर आप निम्न के अंकन स्विच कर सकते हैं:
GroupUser.where("group_id > ? AND user_id != ?", group_id, user_id)
GroupUser.where(group_id: group_id).where.not(user_id: user_id)
?
संघों के साथ काम करते समय आपको हमेशा SQL क्वेरी में तालिका का नाम शामिल करना चाहिए ।
वास्तव में यदि किसी अन्य तालिका में user_id
स्तंभ है और आप दोनों तालिकाओं से जुड़ते हैं, तो आपके पास SQL क्वेरी (अर्थात परेशानियाँ) में एक अस्पष्ट स्तंभ नाम होगा।
तो, आपके उदाहरण में:
GroupUser.where("groups_users.user_id != ?", me)
या थोड़ा और क्रिया:
GroupUser.where("#{table_name}.user_id IS NOT ?", me)
ध्यान दें कि यदि आप हैश का उपयोग कर रहे हैं, तो आपको इसके बारे में चिंता करने की आवश्यकता नहीं है क्योंकि रेल आपके लिए इसका ध्यान रखती है:
GroupUser.where(user: me)
Rails 4 में, जैसा कि @ dr4k3 ने कहा है, क्वेरी विधि not
जोड़ी गई है:
GroupUser.where.not(user: me)