2011-11-22 125 views
1

我按照部分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 %> 

所有的工作...但是...
我有例如几个记录,一个用“另一次测试”,另一个用“最后测试时间”
如果我搜索“测试”第一次出现,但第二次没有,如果我搜索“时间”第二次出现,但不是第一次。它只能看到记录的最后一个字。

是什么给出的?

回答

4

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

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

通过将百分号搜索词之前,你离开之前,它的一切作为通配符。但是,您也会说,通过不在搜索词后面添加任何内容,都不应将其视为通配符。这就是为什么它只匹配最后一个词。

+0

工作,现在我将如何添加搜索另一个领域,我试图加入|| ('body LIKE?',“%#{search}%”)但这并没有做任何事 –

+0

明白了:其中('LIKE?OR body LIKE?','%#{search}%, %#{搜索}%”) –