【发布时间】:2014-04-18 15:21:27
【问题描述】:
我正在使用meta_search gem 在我的目录中搜索产品。但是,当我第一次进入搜索页面或者我发送一个空白值时,会进行搜索并返回并列出所有产品。
我试图阻止检查搜索输入的值不是nil 或"",因此只有在文本字段中实际输入内容时才会执行搜索。
这是我的search.html.erb 文件:
<%= render :partial => 'search_box' %>
<% if @products %>
<p>The search "<%= params[:search][:name_contains] %>" returned <%= pluralize @products.size, "result" %>:</p>
<%= render(:partial => "products") %>
<% end %>
_search_box.html.erb:
<%= form_for @search, :url => "/catalog/search", :html => {:method => :get} do |f| %>
<%= f.label :Name %>
<%= f.text_field :name_contains %>
<%= f.submit 'Search' %>
<% end %>
CatalogController 的search 方法:
def search
if params[:search]
@search = Product.search(params[:search])
@products = @search.all
unless @products.size > 0
flash.now[:notice] = "No results"
end
end
end
当我浏览到/catalog/search 时,我收到以下错误:
NoMethodError in Catalog#search
Showing /*****/app/views/catalog/_search_box.html.erb where line #1 raised:
undefined method `model_name' for NilClass:Class
Extracted source (around line #1):
1: <%= form_for @search, :url => "/catalog/search", :html => {:method => :get} do |f| %>
2: <%= f.label :Nombre %>
3: <%= f.text_field :name_contains %>
4: <%= f.submit 'Search' %>
【问题讨论】:
-
因为当您的参数搜索空白时,@search 为零。你为什么在这里使用 form_for 。只需简单地使用 form_tag
-
这里有几种方法可以做到:stackoverflow.com/questions/5827910/…
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2