2013-11-23 17 views
6

Ho la seguente interrogazionerotaie 4 come utilizzare dove e dove in condizioni contemporaneamente

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

mio sopra query è justing prendendo la 1 da modello di come posso utilizzare where in condizione qui

Edit -1

Questo codice funziona ma non mi sembra un buon codice, giusto?

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

Edit-2

Se uso

@posts = Post.where ("category_id =? E product_model_id a (?)", Id, modello)

Errore di lancio come

invalid input syntax for integer: "15,16" perché il mio input è simile a

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

come correggerlo poi ..

+0

Il codice è soggetto a iniezione, non si può avere: model = (1,2,3,4) in rubino stai facendo riferimento a un array ??? – bjhaid

+0

@bjhaid Si prega di dare un'occhiata alla mia modifica – overflow

+0

vedere la mia risposta sotto – bjhaid

risposta

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

o

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

si può semplicemente usare 'user_ids = User.all.ids' e quindi' Post.where ("user_id in (?)", User_ids) ' – mtfk

2

Si potrebbe usare AREL, ma avevo appena fare qualcosa di simile:

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

14

Secondo la guida rotaie, è possibile passare in un array a where e dovrebbe capire che si desidera utilizzare IN. Vedere la guida qui: http://guides.rubyonrails.org/active_record_querying.html#subset-conditions

Sono un po 'confuso dalla sintassi, dal momento che model = (1, 2, 3, 4) non sembra una sintassi di matrice valida.

parte rilevante della guida:

Client.where(orders_count: [1,3,5]) 
Problemi correlati