rails - 当搜索字段为空时,如何使搜索显示为空白

时间:2011-10-10 23:41:31

标签: ruby-on-rails search

我正在使用元搜索。我想使用电子邮件搜索朋友。

在我的用户控制器中:

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. 我如何制作它以显示“搜索条件没有结果”?如果特定搜索没有匹配项?

  3. 感谢。

1 个答案:

答案 0 :(得分: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>

那会有用吗?