【问题标题】:rails - how to get search display blank when search field is blankrails - 当搜索字段为空白时如何使搜索显示为空白
【发布时间】:2011-10-10 23:41:30
【问题描述】:

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

在我的用户控制器中:

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. 如何让它显示“没有符合您的搜索条件的结果”?如果没有特定搜索的匹配项?

谢谢。

【问题讨论】:

  • 另外,还有一个 用于关闭您的视图中的表单

标签: ruby-on-rails search


【解决方案1】:

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

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

  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>

这行得通吗?

【讨论】:

  • 谢谢亚历克斯。我的问题的第 2 部分已解决。不幸的是,当我单击“搜索”按钮时,它仍然显示所有用户,而搜索字段中没有任何内容。
  • 另外, --params[:search] && !params[:search].blank 的目的是什么? ——?我以为它是这样写的:“无论搜索参数是否为空白”?
  • 我对代码做了一些改动。让我知道是否适合您。基本上,您想查找是否使用真实参数提交了搜索。如果是这样,您可以运行搜索。如果不是,则返回一个空数组作为结果。
  • 谢谢亚历克斯。那行得通。我对它做了两处改动。第一个变化是控制器。我添加了 '@search = User.search(params[:search])' 代替了 '@search = ""',因为如果我点击搜索,它会将我带到用户注册页面。第二个变化是在视图中。我更改了“@search.blank?”到 'params[:search].blank?'因为结果与“@user.blank?”相同。不知道为什么,但这现在完美无缺。谢谢!
  • 你能解释一下这行代码吗? :empty_search = params[:search].keep_if {|k, val| !val.blank?}.empty?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多