2009-11-03 32 views
6

Tôi đang sử dụng gem 'binarylogic-searchlogic' trong phiên bản 2.3.5 cùng với Rails 2.3.4.Rails: searchlogic search with hoặc conditions

Điều tôi muốn làm là thực hiện tìm kiếm trên mô hình cho một giá trị được chỉ định trên nhiều thuộc tính. Tôi đạt được điều này thông qua chaining được kết mọi thứ lại với nhau giống như

User.first_name_or_last_name_or_email_like(value) 

Nhưng với ngày càng nhiều thuộc tính trong này tìm kiếm này có xu hướng xấu xí. Thay vào đó, tôi muốn sử dụng cơ chế tìm kiếm của searchlogic như sau:

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
.. 
@users = search.all 

Vì vậy, đây là cách để tìm kiếm qua AND - nhưng điều tôi muốn là HOẶC. Tôi đã tìm thấy hai cách để đạt được điều này, nhưng cả hai đều không hoạt động.

1st một: thêm vào trước một or_ đến tình trạng

search = User.search 
search.first_name_like = value 
search.or_last_name_like = value 
@users = search.all 

này mang lại cho tôi The or_last_name_like is not a valid condition. You may only use conditions that map to a named scope

2nd một: sử dụng search.any

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
@users = search.any 

mang lại cho tôi undefined method bất kỳ' cho # `.

Có ý tưởng nào về điều đó không? Tôi có hiểu điểm đúng của readme không?

Cảm ơn sự giúp đỡ rất nhiệt tình của bạn!

chỉnh sửa: thời gian đối với một số workaround xấu xí:

search = User.search 
search.first_name_like = value 
search.last_name_like = value 
User.find(:all, :conditions => search.scope(:find).gsub('AND','OR')) 

trình nhưng chắc chắn không phải là cách để đi, phải không?

Trả lời

2

Tôi không nghĩ có cách nào khác để làm điều đó. Theo mặc định, nó sẽ tham gia các đối số với AND.

HOẶC, dường như chỉ hoạt động với chuỗi.

+0

+1 Sau khi xem nhanh, tôi đồng ý với câu trả lời này. Để xác nhận, bạn có thể yêu cầu danh sách gửi thư Searchlogic. –