2011-10-10 130 views
0

我正在使用元搜索。我想用电子邮件搜索朋友。rails - 搜索字段为空时如何让搜索显示为空

在我的用户控制器:

def index 
@search = User.search(params[:search]) 
@users = @search.all 
end 

笔者认为:

<%= form_for @search do |f| %> 

<div class="prepend-top field"> 
    <%= f.label("Primary email address") %></br>  
    <%= f.text_field(:email_matches) %> 
</div> 

<div class="prepend-top field"> 
    <%= f.label("School email address") %></br>  
    <%= f.text_field(:school_email_matches) %> 
</div> 

<div> 
<ul> 
    <% if params[:search].blank? %> 
    Your search results here. 
    <% else %> 
    <% @users.each do |user| %> 
     <li class="box round"> 
     <%= user.name %></br> 
     </li> 
    <% end %> 
    <% end %> 
</ul> 
</div> 

它现在,结果显示在同一页上的相邻列中的方式。我试图让它如此,如果搜索表单是空白的,那么它会返回一个空白搜索。

  1. 当我去的网页开始,在搜索结果方面是空白的,不说“您的搜索结果在这里”:

    问题。但是,当我只点击搜索按钮而不在搜索字段中添加任何内容时,就会返回搜索结果列中所有用户的列表。我该怎么做才能让空白搜索表单真正返回空白页?

  2. 我该如何着手使它显示“没有符合您的搜索条件的结果”?如果没有匹配的特定搜索?

谢谢。

+0

另外,还有一个<% end %>失踪在您的视图关闭窗体 – alex

回答

3

您的部分问题正在发生,因为当您搜索空字符串时,您的搜索功能将返回所有用户。

所以,在你的控制器,你可以这样做:

def index 
    if params[:search] 
     empty_search = params[:search].keep_if {|k, val| !val.blank?}.empty? 
    else 
     empty_search = true 
    end 

    if empty_search 
    # no search was submitted, or search params are all blank 
    @search = "" 
    @users = [] 

    else 
    # a search was submitted 
    @search = User.search(params[:search]) 
    @users = @search.all 
    end 
    end 

(不知道的情况确切的术语,但基本上,如果你传递一个空字符串或没有,你应该运行'else'代码)。

在视图中,你可以这样做:

<% if @search.blank? %> 
    Your search results here. 
    <% else %> 
    <% if @users.blank? %> 
     No results for you 
    <% else %> 
     <ul> 
     <% @users.each do |user| %> 
     <li class="box round"> 
      <%= user.name %></br> 
     </li> 
     <% end %> 
     </ul> 
    <% end %> 
</ul> 

将这项工作?

+0

谢谢亚历克斯。我的问题的第2部分已解决。不幸的是,当我点击搜索字段中的“搜索”按钮时,它仍然显示所有用户。 – noob

+0

另外, - params [:search] &&!params [:search] .blank的用途是什么? - ?我认为它是这样写的:“不管搜索的参数是否为空”? – noob

+0

我在代码中做了一些修改。让我知道如果你的作品。基本上,您想要查找是否使用真实参数提交搜索。如果是这样,您可以运行搜索。如果不是,则返回一个空数组。 – alex