我正在使用元搜索。我想使用电子邮件搜索朋友。
在我的用户控制器中:
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>
现在的方式,结果显示在同一页面上的相邻列上。我想要它,以便如果搜索表单为空,则返回空白搜索。
问题:
当我最初访问该页面时,搜索结果方面是空白的,并说“您的搜索结果在此处”。但是,当我只是点击搜索按钮而不在搜索字段中放置任何内容时,它会返回搜索结果列中所有用户的列表。如何使空白搜索表单真正返回空白页?
我如何制作它以显示“搜索条件没有结果”?如果特定搜索没有匹配项?
感谢。
答案 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>
那会有用吗?