搜索查询传递了几个参数

时间:2013-11-06 16:50:10

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

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

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}

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

2 个答案:

答案 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")