Rails:查找具有相关记录的特定组合的记录

时间:2015-07-26 10:52:54

标签: ruby-on-rails activerecord

我的User模型有很多Events。每个event都有两个属性namedevice

我想获取至少有一个事件的所有users

events.name = 'Logged in' AND events.device = 'iPhone'

并且至少有一个事件:

events.name = 'Upgraded' AND events.device = 'Desktop'

我循环遍历条件的哈希,所以我还需要能够使用ActiveRecord范围来执行OR语句,如下所示:

results = User.all
results = results.where("events.name = 'Logged in' AND events.device = 'iPhone'")
results = results.where("events.name = 'Upgraded' AND events.device = 'Desktop'")

上面的查询不起作用,因为它只查找符合所有条件的事件。

如何在Rails 4中的ActiveRecord中编写此查询?

1 个答案:

答案 0 :(得分:2)

在此代码中

User.joins(:events).where("events.name = 'Logged in' AND events.device = 'iPhone'").where("events.name = 'Upgraded' AND events.device = 'Desktop'")

您正在联系调用并使用其他条件where("events.name = 'Logged in' AND events.device = 'iPhone'")进一步过滤第一组.where("events.name = 'Upgraded' AND events.device = 'Desktop'")

修改

User.joins(:events).where(" (events.name = 'Logged in' AND events.device= 'iPhone') AND (events.name = 'Upgraded' AND events.device = 'Desktop')").

在Rails 5中,将添加OR子句(在Github问题讨论中掠夺)。