开发者

Ruby/Rails Simple search form and white spaces

开发者 https://www.devze.com 2023-01-15 17:46 出处:网络
I\'ve implemented a \"simple search form\" (railscasts #37) in m开发者_如何学Goy app, but I wonder how:

I've implemented a "simple search form" (railscasts #37) in m开发者_如何学Goy app, but I wonder how:

1.) I cannot display any results if the keywords field is empty, or if the index page is loaded (I've tried search != "". Maybe there is a better way) 2.) I can add a function which avoid multiple white spaces in the search. (if users wrote something like "benoit+++" or "++benoit" in the search box, it should display results)

I don't want to use thinking sphinx as I would deploy on heroku

Here is the code:

In my user model (user.rb)

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

In my view (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 %>

and in my controller ( users_controller.rb)

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

Thanks for any help or ressources!!


I would change the search method:

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

something.blank? returns true if something is nil or blank.

something.strip removes all the spaces at the beginning or end of a string. If name could be made of more than 1 word and you wanted to prevent from having more than one space between the words, you could do search.strip.squeeze(" ")

Oh, I don't think you need the if @users && !@users.empty? clause in your view now.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号