2010-10-16 14 views
11

我在這裏以下瑞安的簡單的搜索教程: http://railscasts.com/episodes/37-simple-search-form的Rails 3 - 使用類似搜索組合2列

我在用戶模式下面一行:

find(:all, :conditions => ['fname LIKE ?', "%#{search}%"]) 

但什麼我想要做的是搜索跨組合2列,:FNAME LNAME &

由於用戶正在尋找我的全名:

例,詹姆斯·布朗 FNAME =詹姆斯 L-NAME =布朗

有沒有辦法做到這一點在Rails的安全,將整個數據塊一樣工作的SQLite,MySQL或Postgres的(Heroku的使用)?

謝謝!

回答

14

它可能不是很漂亮,但我用這個在我一個人的模型:

scope :by_full_name lambda {|q| 
    where("first_name LIKE ? or last_name LIKE ? or concat(last_name, ', ', first_name) LIKE ?", "%#{q}%", "%#{q}%" , "%#{q}%") 
} 

見的一些額外的,這將讓搜索查詢是可選的我other posts之一。

+2

這在mysql中有效,我不知道其他db的。 – DGM 2010-10-16 03:41:17

+0

另外,我的用法需要姓,名,根據需要調整concat。 – DGM 2010-10-16 03:42:19

+0

concat是否導致全表掃描? – 2010-10-16 03:46:24

0

這結束了非常好的工作......雖然不確定性能。索引可以幫助嗎?

:conditions => ['fname || lname LIKE?','%#{search}%「]

+0

好吧,也許這不是理想的。如果添加另一個條件,如:[project =? AND'fname || lname LIKE?',「%#{search}%」,「%#{search2}%」]日誌中的查詢會變得很亂。不知道爲什麼? – WozPoz 2010-10-18 18:57:55