Rails搜索返回空白页面

时间:2017-12-17 23:59:28

标签: ruby-on-rails search

我正在尝试在我的网站上实现一个简单的搜索功能。目前,当我使用我的搜索栏时它会起作用,但是如果找不到结果,那么它将拉出一个空白页面。我正在使用PostgreSQL

这是我在recipes / index.html.erb中的表单

    <%= form_with(url: recipes_path, method: :get, local: true) do |form| %>
      <%= form.text_field(:term, {class: 'form-control', type:'search', 
          arialabel:'search', placeholder: 'search by recipe name'})%>
      <%= form.submit 'Search', class: 'btn btn-dark bg-dark' %>
    <% end %>

这是我在recipes_controller.rb中的控制器索引操作

    def index
      @recipes = if params[:term]
                   Recipe.where('name LIKE ?', "%#{params[:term]}")
                 else
                   Recipe.all
      end
@categories = Category.all
end

我想将用户重定向回索引视图并显示一条消息,上面写着“未找到食谱,请搜索其他食谱。”

2 个答案:

答案 0 :(得分:1)

在索引文件中

<%= form_tag('/recepies/', :method => :get, :role => 'form') do %>                   
  <%= text_field_tag :term, :class => "form-control", :placeholder => "Search"%>                                    
  <button class='glyphicon glyphicon-search' type="search">
  </button>
<% end %>

在你的控制器中,

def index
  if params[:term].present?
    @recipes = Recepie.all
    @recipes = @recipes.find_term(params[:term].strip) if params[:term].present?

    if  @recipes.blank?  {
          flash[:notice] = 'the recipe was not found, please search for a different recipe.' 
     }
    end

  else
    @recipes = Recepie.all
  end
end

在你的模特中,

def self.find_term(term)
    recipes = all
    recipes = posts.where("recipes.term= ?", term)      
end

答案 1 :(得分:0)

  

当我使用我的搜索栏时,它会起作用,但是如果找不到结果的话   然后它会拉出一个空白页面。

所以你的搜索有效,但没有结果。

  

我想将用户重定向回索引视图和   显示一条消息,上面写着&#34;找不到食谱,   请搜索不同的食谱。&#34;

您可以执行@recipes.any?之类的操作来检查您是否获得了一些结果。如果您签入控制器,则可以重定向并使用flash获取消息,或者您只需在视图中执行此操作并呈现消息。

PS:不是你问,但我真的很想用ransack来进行复杂的搜索功能。