2010-08-27 34 views
5

Tôi đang cố tạo câu lệnh sql 'OR' trong ActiveRecord 3, tôi đã thử tất cả các loại biến thể nhưng không thể tìm ra ...Làm cách nào để tạo câu lệnh 'OR' trong ActiveRecord?

Ví dụ: tôi muốn truy vấn này bao gồm nhiều 'channel_ids' và để nó trả về tất cả các bài đăng cho bất kỳ ID kênh nào. Này làm việc cho một:

Post.where(:user => 'mike').where(:channel_id => 0).limit(20) 

nhưng tôi không thể tìm ra cách để làm điều đó với bội, tôi đã thử ví dụ:

Post.where(:user => 'mike').where(:channel_id => ?, [0,1,2,3]).limit(20) 

nhưng nó đã không làm việc. Làm thế nào tôi có thể thực hiện công việc này?

Trả lời

4

Sử dụng Arel phương pháp để làm điều này:

t = Post.arel_table 
ids = [1,2,3] 

Post.where(
    t[:user].eq("mike").or(t[:channel_id].in(ids)) 
) 
+0

hoạt động hoàn hảo, cảm ơn rất nhiều. Nghe nói về Arel trước và sẽ đọc nó ngay bây giờ. Rất gọn gàng. –

4

Hãy thử điều này:

Post.where("posts.user = ? OR posts.channel_id IN (?)", "mike", ids) 
+1

Bạn nên để ActiveRecord thoát khỏi danh sách cho bạn thay vì làm điều đó cho mình. Bạn có thể để lại 'ids' trong đó như-là, không có' tham gia' yêu cầu và nó sẽ được mở rộng đến một danh sách được phân cách bằng dấu phẩy cho bạn tự động. – tadman

+1

@tadman, thx, đã cập nhật câu trả lời. –

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