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中.
您想要使用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
在一般情况下,"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)