【问题标题】:Preventing the search to happen checking the value of the search input防止搜索发生检查搜索输入的值
【发布时间】: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 %>

CatalogControllersearch 方法:

  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


【解决方案1】:

试试这个,我认为这样你的@search 将永远被找到

def search
  @search = Product.search(params[:search])
  if params[:search]
    @products = @search.all
    flash.now[:notice] = "No results" unless @products.size > 0
   end
end

【讨论】:

  • meta_search gem 与字段名称一起使用。它必须是 form_for,所以它在 search 中创建一个哈希
  • 然后,如果您的参数搜索为空白,您可以在此处做一件事,然后只需像这样@search = Product.new 初始化您的产品模型。我希望这应该工作
  • 我应该在哪里做呢?在控制器中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 2018-02-07
  • 1970-01-01
  • 2016-07-25
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多