好了到目前为止我有这个搜索查询:
if Object.const_get(params[:model]).find(params[:id]) == @current_department
sent = Message.where(sender_username: params[:username], recipient_username: params[:username])
recieved = Message.where(recipient_username: params[:username])
end
现在我想稍微更改recieved
- 搜索查询:
recieved = Message.where(recipient_username: params[:username])
类似于:
Message.where(sender_username: @current_department.employees.each { |f| f.username}, recipient_username: params[:username]}
但不知怎的,我无法将几个用户名传递给搜索:
sender_username: @current_department.employees.each { |f| f.username}
我没有收到错误,但我的搜索查询无法正常工作!我如何更改查询?感谢
答案 0 :(得分:2)
你必须使用.map
而不是每个,地图返回块中返回值的数组,每个只迭代数组的每个元素:
sender_username: @current_department.employees.map{ |f| f.username }
简写(如果ruby< = 1.8.7,请不要使用它):
sender_username: @current_department.employees.map(&:username)
另外,稍微改进一下,使用pluck (这是一个SQL选择):
sender_username: @current_department.employees.pluck(:username)
pluck(:username)
将仅选择表的用户名列,并在Ruby对象中进行翻译。而map(&:username)
将在ruby记录中加载每个记录,然后只选择username属性。
答案 1 :(得分:1)
.map{|f| f.username}
.each{}
返回输入列表;你想要用户名列表。 ActiveRecord会将后者翻译为username IN ("blah", "blah", "blah")