繁体   English   中英

Rails范围有多个参数

[英]Rails scopes with multiple arguments

在我的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}) %>

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

谢谢!

两个选项

使用“splat”

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 } )

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

<%= 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框中输入一些年龄来制作滤镜。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM