如何在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