如何在Ruby on Rails中搜索字符串?
例如,包含“text”的列的所有记录。
Active Record是否有方法,或者我必须使用SQL“LIKE”吗?
答案 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