我有以下查询
model = (1,2,3,4)
@posts = Post.where(category_id: id, product_model_id: model)
我的上述查询只是从模型中获取1
如何在此处使用where in
条件
修改-1
这段代码有效,但我觉得这不是一个好的代码吗?
@posts = Post.where("category_id = ? and product_model_id in (#{model})", id)
修改-2
如果我使用
@posts = Post.where(“category_id =?and product_model_id in(?)”,id,model)
投掷错误
invalid input syntax for integer: "15,16"
因为我的输入是这样的
select * from posts where category_id=5 and product_model_id in ('15,16')
如何纠正呢......
答案 0 :(得分:25)
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)
答案 1 :(得分:18)
根据rails指南,您可以将数组传递给where
,并且应该了解您要使用IN。请参阅此处的指南:http://guides.rubyonrails.org/active_record_querying.html#subset-conditions
我对你的语法感到有点困惑,因为model = (1, 2, 3, 4)
看起来不像有效的数组语法。
指南的相关部分:
Client.where(orders_count: [1,3,5])
答案 2 :(得分:2)
你可以使用arel,但我会做类似的事情:
@posts = Post.where("category_id = ? AND product_model_id IN (?)", id, model)