Ruby / Rails简单的搜索表单和空格

时间:2010-09-13 11:35:33

标签: ruby-on-rails ruby search

我在我的应用中实现了一个“简单搜索表单”(railscasts#37),但我想知道如何:

1。)如果关键字字段为空,或者索引页面已加载(我已尝试搜索!=“”,我无法显示任何结果。也许有更好的方法) 2.)我可以在搜索中添加一个避免多个空格的函数。 (如果用户在搜索框中写了类似“benoit +++”或“++ benoit”的内容,则应显示结果)

我不想使用思考sphinx,因为我会在heroku上部署

以下是代码:

在我的用户模型(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 个答案:

答案 0 :(得分:2)

我会更改搜索方法:

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?条款。