Ruby on rails rails作用域多个参数

Ruby on rails rails作用域多个参数,ruby-on-rails,search,scope,Ruby On Rails,Search,Scope,我有一个用户模型。我的目标是创建一个范围,返回所选字段找到的用户 像 我认为: <%= select_tag(:filter, options_for_select([["Name", "name"], ["E-mail", "email"]], "name"), {:multiple =&g

我有一个用户模型。我的目标是创建一个范围,返回所选字段找到的用户

我认为:

<%= select_tag(:filter, options_for_select([["Name", "name"],
                                                  ["E-mail", "email"]],
                                                  "name"), {:multiple => true}) %>
<%= text_field_tag :starts_with, params[:starts_with] %>
此时,它显示了一个错误ArgumentError:0的参数数目错误1


谢谢你的帮助

将操作中的代码替换为:

def index
  @users = User.starts_with(params[:filter], params[:starts_with]).paginate(page: params[:page], per_page: 40)
end
发生什么事了

在最初的调用中,您使用User.started_with params[:filter,:started_with]。注意参数[:filter,:start_with]。您正在向params散列的[]方法传递两个参数。此方法只接受一个参数。查看ruby文档了解更多信息:

params是一个散列,就像您可能希望在应用程序或任何ruby代码中使用的任何其他散列一样。因此,您不需要执行未经授权的params[:filter,:starts_with],而需要分别请求:filter key和:starts_with key的值,并将它们作为参数传递给您的作用域,如下所示:

User.starts_with(params[:filter], params[:starts_with])

你需要告诉我们你在哪里调用范围,你的控制器动作等等。。。同时也给我们更多关于你想要实现的细节,一些上下文会更好。你缺少一些代码来帮助你。请粘贴行,如果错误消息与作用域相关,则在该行中调用作用域。当然,更新了作用域调用和错误!姆莱内兹,谢谢你!现在它工作了,但是。。。没有。它只在以下情况下正确搜索:当查询由一个字母组成时。如果有更多字母,则选择返回空。我不明白为什么。有趣的是:如果我用1个参数创建一个作用域,它会很好地搜索:作用域:用、->用{wherename like?}启动,用}%}启动,这会在日志中查询选择用户。*来自像'Ma%'这样的名称的用户,限制40偏移量0。但是,如果我使用多个参数来定义作用域,比如scope:starts_with,->filter,starts_with{where?like?,filter,{starts_with}%},它不会在日志中搜索超过1个字母,SQL是SELECT users.*从'name'比如'Ma%'的用户开始,限制40偏移量0。我认为这都是因为引用,但如何摆脱它们?希望我描述清楚!我的意思是在SQL query=中用引号括起name,我不太喜欢这个解决方案,但是可以像这样插入第一个参数,{filter}like?,{start_with}%。这会改变什么吗?我会考虑一下,试着想出更好的办法。也许是用阿雷尔。不,这不会改变。还尝试将视图中的名称更改为:name。
def index
  @users = User.starts_with(params[:filter], params[:starts_with]).paginate(page: params[:page], per_page: 40)
end
User.starts_with(params[:filter], params[:starts_with])