ruby-on-rails - Rails 范围多个参数

标签 ruby-on-rails search scope

我有一个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/

相关文章:

ruby-on-rails - 在不删除默认值 `*` 的情况下扩展 SELECT

ruby-on-rails - $ bundle exec rake db :reset command raising couldn't drop db/development. sqlite3

php - 没有问号的 GET 请求

xcode - Swift:来自 switch 语句的未解析标识符

javascript - 使用 setTimeout 的自定义对象调用方法丢失范围

ruby-on-rails - Ruby 测试覆盖率映射工具

ruby-on-rails - Webpacker/Typescript 无法解析 Rails Assets 管道文件

javascript - 为什么我的搜索功能只在我错过第一个字符时才匹配?

Ruby:如何测试两个文本 block 之间的相似性?

javascript - jquery 回调函数作用域