我在我的应用中实现了一个“简单搜索表单”(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
感谢您提供任何帮助或资源!!
答案 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?
条款。