我的User
模型有很多Events
。每个event
都有两个属性name
和device
。
我想获取至少有一个事件的所有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中编写此查询?
答案 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问题讨论中掠夺)。