如何在Ruby on Rails中搜索字符串?如何在Ruby on Rails 3中使用Active Record搜索文本?
例如,列中包含「文本」的所有記錄。
Active Record是否有一個方法,或者我必須使用SQL「LIKE」嗎?
如何在Ruby on Rails中搜索字符串?如何在Ruby on Rails 3中使用Active Record搜索文本?
例如,列中包含「文本」的所有記錄。
Active Record是否有一個方法,或者我必須使用SQL「LIKE」嗎?
在某些情況下,Sql like
可能非常低效,例如in many cases in MySQL。我建議使用一些全文索引軟件,如Sphinx,Xapian或Lucene。
Model.find(:all, :conditions => ['name LIKE ?', "%#{tag}%"])
在哪裏標籤是你的包含字符串
按@bjg評論變量: -
或者在Rails 3中你會使用新寫爲
Model.where(["name LIKE :tag", {:tag => tag}])
取景器語法 -
或者在Rails 3中,你會寫爲'Model.where([ 「名稱,如:標籤」,{:標籤=>標籤}])'使用新的取景器語法 – bjg 2010-07-21 23:34:36
但我怎麼告訴RoR3在「名稱」列中搜索該模型的所有列? – 2010-07-22 00:26:31
@never_had_a_name檢查sphinx搜索引擎。檢查思維獅身人面像http://railscasts.com/episodes/120-thinking-sphinx – 2012-03-21 19:37:13
我覺得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 /配置/ aaf.rb
不僅Ferret。斯芬克斯的思維獅身人面像也很好地與AR整合在一起。一般來說,使用全文索引軟件是一個好主意。 – skalee 2010-08-10 16:16:47
費雷的後方疼痛。這很慢,它很容易引起腐敗,我只有問題。思維獅身人面像是要走的路。 – 2010-08-13 01:34:23
如果要部署到Heroku的或不介意下降分貝不可知論,Postgres的具有全文搜索支持。您不需要運行其他服務。除了PG是最好的OS數據庫。 http://tenderlove.github.com/texticle/
所以Active Record中沒有辦法搜索對於每個表和它們的列中的一個字符串? – 2010-08-08 04:23:53
在所有表中搜索可以使用這樣的原始查詢執行:'SELECT'table1'AS table_name,id FROM table1 WHERE c1 LIKE「%text%」or c2 LIKE「%text%」UNION ALL SELECT'table2'AS table_name, id FROM table2 WHERE c3 LIKE「%text%」',但我不會這麼做,這是完全尷尬的。如果您使用MySQL,它具有一些全文索引功能 - http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html - 但我不知道它有多好。我不知道其他關係數據庫中的全文搜索支持。簡述 - AR不會幫助,如果可以的話,請使用全文索引軟件。 – skalee 2010-08-08 11:27:14
剛剛發現一秒前,它可能會幫助你http://snowgiraffe.com/rdocs/ar-extensions/classes/ActiveRecord/Base.html – skalee 2010-08-08 11:33:02