2013-11-23 6 views
6

私はモデルから1は、どのように私はレール4は、同時に

編集こっちwhere in条件を

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

私の上記のクエリがjusting取ってある次のクエリを使用することができています-1

このコードは機能しますが、これは正しいコードのように感じられません。

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

編集-2

Iは

@posts = Post.whereを使用する場合( "CATEGORY_ID =と(?)でproduct_model_id"、ID、モデル)

invalid input syntax for integer: "15,16"私の入力は次のようなものです:

0123それを修正する方法

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

..

+0

コード注射を受け、あなたが持つことができない。モデル=(1,2,3,4 )あなたは配列を参照していますか? – bjhaid

+0

@bjhaid私の編集 – overflow

+0

を見てください。私の答えは – bjhaid

答えて

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

又は

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

です。あなたは単に 'user_ids = User.all.ids'を使って' Post.where( "user_id in(?)"、user_ids) – mtfk

2

あなたはARELを使用することができますが、私はちょうどような何かしたい:

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

14

レールガイドによると、あなたが渡すことができますwhereに配列し、INを使用することを理解する必要があります。

model = (1, 2, 3, 4)は有効な配列構文のようには見えないので、私はあなたの構文で少し混乱しています。

ガイドの関連部分:

Client.where(orders_count: [1,3,5]) 
関連する問題