我根据railscast#240的一部分设置了一个简单的搜索。
控制器中的
@reports = Report.search(params[:search]).order('created_at DESC').paginate(:page => params[:page], :per_page => 5)
在模型中
def self.search(search)
if search
where('apparatus LIKE ?', "%#{search}")
else
scoped
end
end
在视图中
<%= form_tag reports_path, :method => :get do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
一切正常......但是...... 例如,我有一些记录,一个是“另一个时间测试”,另一个是“最后时间测试” 如果我搜索“测试”第一个出现但第二个没有,如果我搜索“时间”第二个出现但不是第一个。它只能看到记录的最后一个字。
是什么给了什么?答案 0 :(得分:4)
您需要在搜索字词的两边放置百分号。像这样:
where('apparatus LIKE ?', "%#{search}%")
通过在搜索字词之前添加百分号,您可以将其前面的所有内容保留为通配符。但是,您还要说,不要在搜索字词之后,在此之后不应将任何内容视为通配符。这就是为什么它只匹配最后一个单词。