1

好的,到目前为止我有这个搜索查询:

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稍微改变一下 -search 查询:

 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}

我没有收到错误,但我的搜索查询仍然无法正常工作!我该如何更改我的查询?谢谢

4

2 回答 2

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​​ 记录中的每个记录,然后仅选择用户名属性)。

于 2013-11-06T16:51:51.330 回答
1

.map{|f| f.username}

.each{}返回输入列表;你想要用户名列表。ActiveRecord 会将后者翻译成username IN ("blah", "blah", "blah")

于 2013-11-06T16:52:22.027 回答