Rails范围有多个参数

时间:2014-08-18 14:27:43

标签: ruby-on-rails lambda filtering named-scopes

在我的offer.rb模型中,我正在对拥有这些优惠的客户进行一些过滤。 但我希望能够通过我的范围内的另一个参数来搜索,例如,客户的年龄等。

这就是我现在的优惠模式:

scope :with_client_id, lambda { |client_id| where(:client_id => client_id) }

在视图中:

<%= f.select(:with_client_id, options_for_select(current_partner.clients.collect{|c| [c.name, c.id]}), { include_blank: true}) %>

如何在此范围内传递客户的年龄?

谢谢!

2 个答案:

答案 0 :(得分:4)

两个选项

使用&#34; splat&#34;

scope :with_client_id_and_age, lambda { |params| where(:client_id => params[0], :age => params[1]) }

然后你必须用:

来调用它
Offer.with_client_id_and_age( client_id, age )

使用params哈希

scope :with_client_id_and_age, lambda { |params| where(:client_id => params[:client_id], :age => params[:age]) }

然后你必须用:

来调用它
Offer.with_client_id_and_age( { client_id: client_id, age: age } )

答案 1 :(得分:0)

我保持范围不变,只修改了视图中的选择:

<%= f.select(:with_client_id, options_for_select(current_partner.clients.collect{|c| [c.name_and_age, c.id]}), { include_blank: true}) %>

使用客户端控制器中的name_and_age方法:

def name_and_age
  [name, age].compact.join " "
end

我也可以在select2框中输入一些年龄来制作滤镜。