উত্তর:
4. কারাগারে (দেখুন http://edgeguides.rubyonrails.org/active_record_querying.html#not- শর্তাদি )
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]
@ জেবার্ডেনের উত্তরে রেল 4.0 সিনট্যাক্স ক্রেডিট
GroupUser.where(other_condition: true).where.not(user_id: user_id)
আপনি এটি ফ্যানসিয়ার পাওয়ার একমাত্র উপায় মেটাওয়ের সাথে রয়েছে ।
মেটাওয়ের একটি নতুন চাচাত ভাই রয়েছে যার নাম স্কুইয়েল যা এই জাতীয় কোডের অনুমতি দেয়:
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)
?
সমিতিগুলির সাথে ডিল করার সময় আপনার সর্বদা এসকিউএল কোয়েরিতে সারণির নাম অন্তর্ভুক্ত করা উচিত ।
প্রকৃতপক্ষে যদি অন্য কোনও টেবিলের user_id
কলাম থাকে এবং আপনি উভয় টেবিলগুলিতে যোগদান করেন তবে আপনার এসকিউএল ক্যোয়ারিতে একটি দ্ব্যর্থক কলামের নাম থাকবে (অর্থাত্ ঝামেলা)।
সুতরাং, আপনার উদাহরণে:
GroupUser.where("groups_users.user_id != ?", me)
বা কিছুটা আরও ভার্বোজ:
GroupUser.where("#{table_name}.user_id IS NOT ?", me)
মনে রাখবেন যে আপনি যদি একটি হ্যাশ ব্যবহার করছেন তবে আপনার এটি নিয়ে চিন্তা করার দরকার নেই কারণ রেলগুলি এটি আপনার জন্য যত্ন নেয়:
GroupUser.where(user: me)
4 ডিলগুলিতে, @ dr4k3 দ্বারা যেমন বলা হয়েছে, ক্যোয়ারী পদ্ধতিটি যুক্ত not
করা হয়েছে:
GroupUser.where.not(user: me)