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

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

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

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

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

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

其中tag是包含字符串的变量

根据@bjg评论: –

或者在Rails 3中,你会把它写成

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

使用新的finder语法 –

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

 Model.match(:name => tag) 

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

如果您正在部署到heroku或者不介意删除db不可知论,则postgres具有全文搜索支持。 您无需运行其他服务。 除了PG是最好的OS数据库。 http://tenderlove.github.com/texticle/

我认为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中

  • 找到这个教程看起来不错的全文搜索ruby on rails 3(ferret)

  • Github来源: http : //github.com/jkraemer/acts_as_ferret/tree/rails3

  • 原始插件: http : //ferret.davebalmain.com/trac/wiki/FerretOnRails