ruby on rails - العثور على ارتباطات no_one في حيث الاستعلام




ruby-on-rails activerecord (2)

قد يكون هذا سؤالًا بسيطًا ، ولكن يبدو أنني أسحب شعري لأبحث عن حل أنيق هنا. لدي فئتين من نماذج ActiveRecord ، مع وجود has_one و join_to بينهما:

class Item < ActiveRecord::Base
  has_one :purchase
end

class Purchase < ActiveRecord::Base
  belongs_to :item
end

أنا أبحث عن طريقة أنيقة للعثور على جميع عناصر العنصر ، التي ليس لها أي كائن شراء مرتبط بها ، من الناحية المثالية دون اللجوء إلى وجود قيمة منطقية أو سمة مشابهة في العنصر.

الآن لدي:

purchases = Purchase.all
Item.where('id not in (?)', purchases.map(&:item_id))

الذي يعمل ، لكنه يبدو غير فعال بالنسبة لي ، حيث إنه يقوم بعمليتي استجواب (والمشتريات قد تكون مجموعة قياسية ضخمة).

تشغيل القضبان 3.1.0


إنها مهمة شائعة جدًا ، عادةً ما يعمل SQL OUTER JOIN بشكل جيد. ألقِ نظرة here ، على سبيل المثال.

في لك محاولة استخدام شيء من هذا القبيل

not_purchased_items = Item.joins("LEFT OUTER JOIN purchases ON purchases.item_id = items.id").where("purchases.id IS null")

العثور على طريقتين مختلفتين من Railsey للقيام بذلك:

Item.includes(:purchase).references(:purchase).where("purchases.id IS NULL")

Item.includes(:purchase).where(purchases: { id: nil })

من الناحية الفنية ، يعمل المثال الأول بدون عبارة "المراجع" ، ولكن Rails 4 يبث تحذيرات الإزالة بدونها.





activerecord