【问题标题】:Search function wrong number of argument (2 for 1)搜索函数错误的参数数量(2 为 1)
【发布时间】:2015-08-10 16:43:21
【问题描述】:

我正在尝试实现一个简单的搜索功能,它会触发一些参数错误。这里 我的看法

<%= form_tag(clients_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Clients" %>
<%= submit_tag "Search", :name => nil %>
<% end %>

我的控制器中的方法

def index
if current_user.admin?
  if params[:search]
    @clients = Client.search(params[:search], load:true).result
  else
    @clients = Client.all.paginate(:per_page => 3, :page => params[:page])
  end
else
    @clients = current_user.clients
end
end

我的模型

def self.search(query)
  where("name like ?","%#{query}%") 
end

我收到错误消息“参数数量错误(2 比 1)”。我看不到传递给模型的另一个参数是什么。一双新鲜的眼睛会有所帮助。谢谢。

【问题讨论】:

    标签: ruby-on-rails search argument-passing


    【解决方案1】:

    您的search 方法只允许一个参数:

    def self.search(query)
      where("name like ?","%#{query}%") 
    end
    

    但你试图将它与 2 一起使用:

    @clients = Client.search(params[:search], load:true).result
                                            # ^^^^^^^^^^^ second argument
    

    【讨论】:

    • 谢谢,但现在它触发了另一个问题(#<:activerecord_relation:0x007ffa9abae388> 的未定义方法 `result')。
    • 那么,从Client.search(params[:search], load:true).result 中删除.result 应该怎么做?
    • 我最初用它来纠正一个触发未定义方法 total_pages 的 will_paginate 错误。我已将其删除并使用 will_paginate 删除了我的分页,并尝试找到另一种对我的应用程序进行分页的方法。谢谢。
    • 您是否使用 gem 进行分页?哪一个?
    【解决方案2】:

    实际上你传递了两个参数。

    @clients = Client.search(params[:search], load:true).result
    

    但是在模型中你只需要一个参数。

    def self.search(query)
      where("name like ?","%#{query}%") 
    end
    

    你必须在模型方法中访问 load:true。

    def self.search(query, load)
      where("name like ?","%#{query}%") 
    end
    

    或根据您的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-26
      • 2017-08-29
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2016-12-16
      相关资源
      最近更新 更多