2011-10-10 65 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

相關問題