我正在使用Ruby on Rails 2.3.8,我希望得到尚未添加到@products
数组的所有listed_products
。
例如,假设我有以下代码:
listed_products = ['1', '2', '3', '4', '5']
#Then, I would like to do something like SELECT * FROM products where id not in
#(listed_products), and save the result in @products
我知道上面的SQL语法不起作用,但我只是想让你们了解我想要实现的目标。
这样做是否有“轨道”?
提前致谢!
答案 0 :(得分:11)
是的,您可以执行以下操作(Rails 2.3.x):
listed_products = [1,2,3,4,5] Product.find(:all, :conditions => ["id NOT IN (?)", listed_products])
或者在Rails 3.0.x中:
listed_products = [1,2,3,4,5] Product.where("id NOT IN (?)", listed_products)
答案 1 :(得分:1)
Pan的答案是正确的,但您也可以使用2.3.8中的范围,它允许您与该类的其他范围链接:
class Product
...
named_scope :excluding_ids, lambda { |*ids|
if ids.count==0 then
{}
else
{:conditions => ["id NOT IN (?)",ids]}
end
}
...
end
然后,您可以与班级中的其他范围链接。假设您有一个名为:active的范围。然后你可以这样做:
Products.active.excluding_ids(*listed_products).find :all, ... more conditions ...
并且它将与范围的顺序无关:
Products.excluding_ids(*listed_products).active.find :all, ..
答案 2 :(得分:-1)
我能想到的最好的是:
SELECT * FROM products where id not = '1' and id not = '2' (etc...)
在我确定之后不是你的意思,但这可能是唯一的方法!