简单搜索仅搜索记录的最后一个单词

时间:2011-11-22 17:42:17

标签: ruby-on-rails search

我根据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 %>

一切正常......但是...... 例如,我有一些记录,一个是“另一个时间测试”,另一个是“最后时间测试” 如果我搜索“测试”第一个出现但第二个没有,如果我搜索“时间”第二个出现但不是第一个。它只能看到记录的最后一个字。

是什么给了什么?

1 个答案:

答案 0 :(得分:4)

您需要在搜索字词的两边放置百分号。像这样:

where('apparatus LIKE ?', "%#{search}%")

通过在搜索字词之前添加百分号,您可以将其前面的所有内容保留为通配符。但是,您还要说,不要在搜索字词之后,在此之后不应将任何内容视为通配符。这就是为什么它只匹配最后一个单词。