2010-10-16 37 views
11

Tôi đang theo Mẫu Tìm kiếm đơn giản hướng dẫn ryan ở đây: http://railscasts.com/episodes/37-simple-search-formRails 3 - Sử dụng muốn tìm kiếm một kết hợp 2 cột

Tôi có dòng sau trong người mẫu của tôi:

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

Nhưng những gì tôi muốn làm là tìm kiếm qua một kết hợp 2 cột ,: fname lname &

Khi người dùng đang tìm kiếm tên đầy đủ của tôi:

Ví dụ, James Brown fname = James lname = Nâu

Có cách nào để làm điều này trong Rails một cách an toàn mà sẽ làm việc trên DBS như SQLite, MySQL hoặc Postgres (Heroku sử dụng)?

Cảm ơn!

Trả lời

14

Nó có thể không đẹp, nhưng tôi sử dụng này trong mô hình bảng Person:

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

Xem một trong other posts của tôi cho một chút bổ sung mà sẽ cho phép truy vấn tìm kiếm là tùy chọn.

+2

Điều này hoạt động trong mysql, tôi không biết về các db khác. – DGM

+0

Ngoài ra, việc sử dụng của tôi yêu cầu họ, tên, điều chỉnh concat khi cần thiết. – DGM

+0

Liệu kết quả concat trong quét toàn bộ bảng? –

0

Điều này đã kết thúc hoạt động rất tốt ... Không chắc chắn về hiệu suất mặc dù. Indexes có thể giúp điều này?

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

+0

ok có lẽ đây không phải là lý tưởng. Nếu bạn thêm một điều kiện khác như: [project =? AND'fname || lname LIKE? ', "% # {search}%", "% # {search2}%"] Truy vấn trong nhật ký bị lộn xộn. không chắc chắn tại sao? – WozPoz

Các vấn đề liên quan