我试过
@users = User.where(name: @request.requester or @request.regional_sales_mgr)
和
@users = User.where(name: @request.requester).where(name: @request.regional_sales_mgr).all
这似乎不起作用。我想要的是找到名称与@ request.requester匹配的用户,以及名称与@ request.regional_sales_mgr匹配的用户,并将它们保存到变量@users中。
答案 0 :(得分:6)
您想要使用SQL IN
子句。 Activerecord提供了一个快捷方式:
@users = User.where(name: [@request.requester, @request.regional_sales_mgr]).all
将值数组赋给name:
将生成以下SQL语句:
SELECT * FROM users WHERE name IN (value1, value2, and so on...);
这应该找到名称为@request.requester
或@request.regional_sales_mgr
答案 1 :(得分:5)
在一般情况下,“OR”查询可以写成:
User.where("users.name = ? OR users.name = ?", request.requester, request.regional_sales_mgr)
注意: Rails 5 将支持OR
使用:
User.where(name: request.requester).or(User.where(name: request.regional_sales_mgr))
对于这种特定情况,作为其他答案中的状态,IN查询更简单:
User.where(name: [request.requester, request.regional_sales_mgr])
答案 2 :(得分:1)
@users = User.where(name: [@request.requester, @request.regional_sales_mgr])
对于那些发现这篇文章的人,就像我实际上一直在寻找一个轨道,你可以链接到哪里。例如,仅通过连接表获得具有两种技能的用户。 (这将返回具有x和y技能的用户,不会返回仅具有x的用户)
@users = User.joins(:skillable_joins).where(skillable_joins: { skill_id: 1 }).where(skillable_joins: { skill_id: 2 })