这可能是一个简单的问题,但我似乎正在努力寻找一个优雅的解决方案。我有两个 ActiveRecord 模型类,它们之间有 has_one 和 belongs_to 关联:
class Item < ActiveRecord::Base
has_one :purchase
end
class Purchase < ActiveRecord::Base
belongs_to :item
end
我正在寻找一种优雅的方法来查找所有 Item 对象,这些对象没有与之关联的购买对象,理想情况下无需求助于 bool is_purchased
或 Item 上的类似属性。
现在我有:
purchases = Purchase.all
Item.where('id not in (?)', purchases.map(&:item_id))
这行得通,但对我来说似乎效率低下,因为它执行两个查询(并且购买可能是一个庞大的记录集)。
运行 Rails 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")
关于ruby-on-rails - 在 where 查询中查找 nil has_one 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515268/