ruby-on-rails - 在 where 查询中查找 nil has_one 关联

标签 ruby-on-rails ruby activerecord

这可能是一个简单的问题,但我似乎正在努力寻找一个优雅的解决方案。我有两个 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/

相关文章:

ruby-on-rails - 相同的枚举不能在 rails 的不同列中工作

ruby-on-rails - 如何使用 Active Record 回滚特定的数据库

ruby-on-rails - nil:NilClass的未定义方法“all_text_fields”

ruby-on-rails - 在 Rails 查找的特定列中查找不同值的数量

ruby-on-rails - 序列化数组的条件验证

ruby-on-rails - 如何在 Rails 3 中使用 OR 条件合并两个事件记录关系并返回结果也是事件关系而不是数组?

ruby-on-rails - 如何允许带有 * 键 => 值的哈希?

ruby-on-rails - 如何计算下一次出现时间 04 :00 am EST?

ruby-on-rails - 获取与模型关联的嵌套属性

java - 仅使用四种 HTTP 方法创建任何类型的 RESTful API?