Rails .where(....和....)搜索相同属性的两个值

sab*_*ams 4 sql activerecord ruby-on-rails

我试过了

@users = User.where(name: @request.requester or @request.regional_sales_mgr)
Run Code Online (Sandbox Code Playgroud)

@users = User.where(name: @request.requester).where(name: @request.regional_sales_mgr).all
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.我想要的是找到名称与@ request.requester匹配的用户,以及名称与@ request.regional_sales_mgr匹配的用户,并将它们保存到变量@users中.

Die*_*zar 6

您想要使用SQL IN子句.Activerecord提供了一个快捷方式:

@users = User.where(name: [@request.requester, @request.regional_sales_mgr]).all
Run Code Online (Sandbox Code Playgroud)

提供一组值name:将生成以下SQL语句:

SELECT * FROM users WHERE name IN (value1, value2, and so on...);
Run Code Online (Sandbox Code Playgroud)

这应该找到名称为@request.requester或的所有用户@request.regional_sales_mgr


Kev*_*tre 5

在一般情况下,"OR"查询可以写成:

User.where("users.name = ? OR users.name = ?", request.requester, request.regional_sales_mgr)
Run Code Online (Sandbox Code Playgroud)

注意:Rails 5将支持OR使用:

User.where(name: request.requester).or(User.where(name: request.regional_sales_mgr))
Run Code Online (Sandbox Code Playgroud)

对于此特定情况作为其他答案中的状态,IN查询更简单:

User.where(name: [request.requester, request.regional_sales_mgr])
Run Code Online (Sandbox Code Playgroud)