0

我正在尝试在我的 rails 应用程序中创建一个搜索表单。我已经查找了各种解决方案,但它们对我来说毫无意义。

当我通过我的 rails 应用程序中的表单运行搜索时,我收到以下错误。现在我关心的(除了错误)是我的索引操作中的实例变量@computers。我很确定这不是正确完成搜索的“轨道方式”,并且希望得到一些建议。

错误

undefined method `%' for #<Array:0x5780460>

搜索后的参数

http://localhost:3000/computers?utf8=%E2%9C%93&direction=&sort=&search=bob

搜索表格

<%= form_tag computers_path, method: "get" do %>
        <%= hidden_field_tag :direction, params[:direction] %>  
        <%= hidden_field_tag :sort, params[:sort] %>
        <%= text_field_tag :search, params[:search] %>
        <%= submit_tag "Go", name: nil, class: "btn btn-primary" %>
<% end %>

调用方法

def index
    @computers = Computer.where(school_id: current_user.school_id).search(params[:search]).category(params[:category]).order(sort_column + " " + sort_direction)
end

方法

  def Computer.search(search)
    if search
      search = search.downcase
      params = []
      values = {}

      column_names.each do |c|
        params << "#{c} LIKE #{c.to_sym}"
        values[c.to_sym] = search
      end

      params.join (' OR ')
      where(params,values)
    else
      all
    end
  end
4

1 回答 1

0

您的想法是正确的,但是调用该.join方法并不会更改调用它的对象,它只是返回一个字符串表示形式。您需要将返回值存储在一个变量中,如下所示paramsStr = params.join(' OR '):然后简单地传递paramsStr给 where 子句。

最终,这就是导致您的unidentified method % for Array ....错误的原因;这个版本的where方法期望第一个参数是一个字符串。查看这个文档,关于占位符条件的部分。

希望有帮助。

于 2013-10-15T21:43:22.940 回答