rails - как сделать так, чтобы поиск отображался пустым, когда поле поиска пустое - PullRequest
0 голосов
/ 11 октября 2011

Я использую метапоиск.Я хочу искать друзей по электронной почте.

В моем контроллере пользователей:

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. Как мне сделать так, чтобы на ней отображалось «Нет результатов для ваших критериев поиска»?если для конкретного поиска нет совпадений?

Спасибо.

1 Ответ

3 голосов
/ 11 октября 2011

Часть вашей проблемы происходит, потому что когда вы ищете пустую строку, ваша функция поиска возвращает всех ваших пользователей.

Итак, в вашем контроллере вы можете сделать:

  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>

Будет ли это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...