我有一个User
模型。我的目标是拥有一个返回由选定字段找到的用户
的范围。
喜欢
scope :starts_with, ->(filter, starts_with) { where("? like ?", "#{filter}", "#{starts_with}%")}
这是我的观点:
<%= select_tag(:filter, options_for_select([["Name", "name"],
["E-mail", "email"]],
"name"), {:multiple => true}) %>
<%= text_field_tag :starts_with, params[:starts_with] %>
UPD 我这样调用范围:
def index
@users = User.starts_with(params[:filter, :starts_with]).paginate(page: params[:page], per_page: 40)
end
目前显示错误ArgumentError:参数数量错误(1 for 0)
感谢您的帮助!
最佳答案
将操作中的代码替换为:
def index
@users = User.starts_with(params[:filter], params[:starts_with]).paginate(page: params[:page], per_page: 40)
end
发生了什么事
在最初的调用中,您执行User.starts_with(params[:filter, :starts_with])
。请注意 params[:filter, :starts_with]
。您将两个参数传递给 params hash
的 []
方法。此方法仅接受一个参数。查看 ruby 文档以获取更多信息:
http://www.ruby-doc.org/core-2.1.2/Hash.html#method-i-5B-5D
params 是一个 hash
,就像您可能想在应用程序或任何 ruby 代码中使用的任何其他 hash
一样。因此,您需要询问 :filter
键和 :starts_with 的值,而不是执行未经授权的
单独键入并将它们作为参数传递给您的作用域,如下所示:params[:filter, :starts_with]
User.starts_with(params[:filter], params[:starts_with])
关于ruby-on-rails - Rails 范围多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491903/