Ruby on rails 未定义的方法'stringify\u keys';至于&引用;:使用元搜索时的字符串
这是我的_search_box.html.erb文件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
<%= 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
...