如何在Ruby on Rails 3中搜索Active Record的文本?

时间:2010-07-21 23:20:14

标签: ruby-on-rails

如何在Ruby on Rails中搜索字符串?

例如,包含“text”的列的所有记录。

Active Record是否有方法,或者我必须使用SQL“LIKE”吗?

4 个答案:

答案 0 :(得分:11)

 Model.find(:all, :conditions => ['name LIKE ?', "%#{tag}%"])

其中tag是包含字符串

的变量

根据@bjg评论: -

或者在Rails 3中,您将其写为

  Model.where(["name LIKE :tag", {:tag => tag}]) 

使用新的finder语法 -

答案 1 :(得分:8)

在某些情况下,Sql like可能效率很低,例如in many cases in MySQL。我建议使用一些全文索引软件,如Sphinx,Xapian或Lucene。

答案 2 :(得分:3)

你也可以使用Arel的'匹配'方法:

Model.match(:name => tag)

如果你想搜索所有列,那么你应该写一些额外的代码。

答案 3 :(得分:2)

我认为acts_as_ferret插件非常适合您的需求,这个插件允许您轻松配置非常酷的索引,如

ActsAsFerret::define_index( 'my_index',
                        :models => {
                          SomeModel => {
                            :fields => {
                              :name => { :boost => 4, :store => :yes, :via => :ferret_title },
                              :foo => { :store => :no,  :index => :untokenized },
                              :baz => { :store => :yes, :via => :ferret_content }
                            }
                          }
                        } )

所有acts_as_ferret索引都配置在一个文件中,RAILS_ROOT / config / aaf.rb