Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义的方法'stringify\u keys';至于&引用;:使用元搜索时的字符串_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 未定义的方法'stringify\u keys';至于&引用;:使用元搜索时的字符串

Ruby on rails 未定义的方法'stringify\u keys';至于&引用;:使用元搜索时的字符串,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,这是我的_search_box.html.erb文件 <%= form_tag "/catalog/search", :method => "get" do %> <%= text_field_tag :q %> <%= submit_tag 'Search' %> <% end %> 这是我对CatalogController类的search方法: def search @search = Product.searc

这是我的_search_box.html.erb文件

<%= form_tag "/catalog/search", :method => "get" do %>
  <%= text_field_tag :q %> 
  <%= submit_tag 'Search' %>
<% end %>
这是我对
CatalogController
类的
search
方法:

  def search
    @search = Product.search(params[:q].to_s)
    @products = @search.all
    unless @products.size > 0
      flash.now[:notice] = "No results."
    end
  end
当我访问
/catalog/search

NoMethodError in CatalogController#search

undefined method `stringify_keys!' for "":String
我正在使用
meta\u搜索
gem进行搜索


发生了什么?

您不应该将要搜索的内容的值直接放入
q
q
应该是所有搜索条件的散列。例如:

q: { name_contains: 'something interesting', price_less_than: '100' }
这样,搜索条件进入控制器的
params[:q]
。如果您不想使用此散列,并且产品名称只有一个搜索字段,例如,如果要进行子字符串匹配,请将视图更改为类似以下内容:

<%= text_field_tag :name_contains %>
但是,如果使用这种方法,请注意不要输入任何与搜索无关的参数,否则它们也将转到元搜索,这就是为什么通常应使用
q
散列


最后,元搜索gem已经很旧了,现在不再维护。如果您刚刚开始设置搜索,那么可以看看在其简单模式下基本上是对元搜索的重写。

什么值是
params[:q]
有效?无论文本字段中输入的是什么,您已经在@graemeclean附加的链接中找到了答案。如果我想按不同的值搜索,我会得到未定义的方法“controller=”,我该怎么做?我正在使用您的答案,但没有搜索结果。名称与输入匹配的产品我已编辑了我的答案,以使用名为
name
的字段,而不是
product\u name
。我意识到,由于您正在搜索product表,因此可能看起来该构造是
\uuuu
。实际上,它只是
<%= text_field_tag :name_contains %>
<%= text_field_tag :name_equals %>
def search
  @search = Product.search params
  ...