Ruby / Rails Простая форма поиска и пробелы - PullRequest
2 голосов
/ 13 сентября 2010

Я реализовал «простую форму поиска» (railscasts # 37) в своем приложении, но мне интересно, как:

1.) Я не могу отобразить результаты, если поле ключевых слов пусто или если страница индекса загружена (я пробовал поиск! = "". Возможно, есть лучший способ) 2.) Я могу добавить функцию, которая позволяет избежать нескольких пробелов в поиске. (если пользователи написали что-то вроде «benoit +++» или «++ benoit» в окне поиска, оно должно отображать результаты)

Я не хочу использовать мыслящего сфинкса, как при развертывании на герою

Вот код:

В моей модели пользователя (user.rb)

def self.search(search) 
  if search and search != ""
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
  end 

На мой взгляд (views / users / index.html.erb)

<% form_tag users_path, :method => 'get' do %>
  <%= text_field_tag :search, params[:search] %>
  <%= submit_tag "Search", :name => nil %>
<% end %>

<% if @users and not @users.empty? %>
  <% @users.each do |user| %>  
    <p><%= link_to "#{user.name}", user %></p>
.
.
.
  <% end %>
<% end %>

и в моем контроллере (users_controller.rb)

def index
  @users = User.search(params[:search])
end

Спасибо за любую помощь или ресурсы !!

1 Ответ

2 голосов
/ 13 сентября 2010

Я бы изменил метод поиска:

def self.search(search)
  search.blank? ? [] : all(:conditions => ['name LIKE ?', "%#{search.strip}%"])
end

something.blank? возвращает true, если что-то ноль или пусто.

something.strip удаляет все пробелы в начале или конце строки. Если имя может состоять из более чем одного слова, и вы хотите, чтобы между словами не было больше одного пробела, вы можете сделать search.strip.squeeze(" ")

О, я не думаю, что вам нужен пункт if @users && !@users.empty? в вашем представлении.

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