2013-11-23 21 views
6

Tôi đã truy vấn sauray 4 làm thế nào để sử dụng ở đâu và ở đâu trong điều kiện đồng thời

model = (1,2,3,4) 
@posts = Post.where(category_id: id, product_model_id: model) 

truy vấn trên của tôi là justing lấy 1 từ mô hình như thế nào tôi có thể sử dụng where in điều kiện trên đây

Sửa -1

Đoạn mã này hoạt động nhưng tôi không cảm thấy đây là mã tốt phải không?

@posts = Post.where("category_id = ? and product_model_id in (#{model})", id) 

Sửa-2

Nếu tôi sử dụng

@posts = Post.where ("category_id =? Và product_model_id trong (?)", Id, mô hình)

Lỗi ném là

invalid input syntax for integer: "15,16" vì đầu vào của tôi giống như thế này

select * from posts where category_id=5 and product_model_id in ('15,16')

Làm thế nào để sửa chữa nó rồi ..

+0

Mã này là tùy thuộc vào tiêm, bạn không thể có: mô hình = (1,2,3,4) trong ruby ​​là bạn đề cập đến một mảng ??? – bjhaid

+0

@bjhaid Xin hãy xem biên tập của tôi – overflow

+0

xem câu trả lời của tôi bên dưới – bjhaid

Trả lời

14
model_ids = model.split(",").map(&:to_i) 
@posts = Post.where(category_id: id, product_model_id: model_ids)</code> 

hoặc

model_ids = model.split(",").map(&:to_i) 
@posts = Post.where("category_id = ? AND product_model_id IN (?)", id, model_ids) 
+0

bạn chỉ có thể sử dụng 'user_ids = User.all.ids' và sau đó là' Post.where ("user_id in (?)", User_ids) ' – mtfk

2

Bạn có thể sử dụng AREL, nhưng tôi chỉ muốn làm điều gì đó như:

@posts = Post.where("category_id = ? AND product_model_id IN (?)", id, model)

14

Theo hướng dẫn đường ray, bạn có thể vượt qua trong một mảng đến where và bạn nên hiểu rằng bạn muốn sử dụng IN. Xem hướng dẫn tại đây: http://guides.rubyonrails.org/active_record_querying.html#subset-conditions

Tôi hơi bối rối bởi cú pháp của bạn, vì model = (1, 2, 3, 4) không giống cú pháp mảng hợp lệ.

phần có liên quan của hướng dẫn:

Client.where(orders_count: [1,3,5]) 
Các vấn đề liên quan