I am having problems writing conditions for a find request. Here is my
situation:
Product has and belongs to many Categories
So I have join table: categories_products
I want to find all products that are not in category.id = 1. If they
belong to category.id = 1 then I don’t want them returned.
I have tried the following and non of them worked:
Product.find(:all, :conditions => “categories.id != 1”, :include =>
:categories)
Product.find(:all, :conditions => “categories_products.category_id !=
1”, :include => :categories)
Each of those still returned products in the category.id = 1
Any idea how I can accomplish this?
Thanks for your help.
Ben J. wrote:
I am having problems writing conditions for a find request. Here is my
situation:
Product has and belongs to many Categories
So I have join table: categories_products
I want to find all products that are not in category.id = 1. If they
belong to category.id = 1 then I don’t want them returned.
I have tried the following and non of them worked:
Product.find(:all, :conditions => “categories.id != 1”, :include =>
:categories)
Product.find(:all, :conditions => “categories_products.category_id !=
1”, :include => :categories)
Each of those still returned products in the category.id = 1
Any idea how I can accomplish this?
Thanks for your help.
Also, the problem is that if a product belongs to ANY other category it
is returned. I want it so that if that product belongs to that category,
do not return it, regardless if it’s in other categories.
Thanks for your help.
I have tried the following and non of them worked:
Product.find(:all, :conditions => “categories.id != 1”, :include =>
:categories)
Product.find(:all, :conditions => “categories_products.category_id !=
1”, :include => :categories)
Each of those still returned products in the category.id = 1
Any idea how I can accomplish this?
@products_not_in_category_1 = Product.find(:all, :include =>
:categories).map {|p| p.categories.include?(1) ? nil : p}.compact
Not very efficient if you have a lot of products/categories, but that
should work I think… or something along those lines.
-philip
Any idea how I can accomplish this?
complicated, but it needs to be SQL.
Then something like…
select * from products where id not in (select product_id from
categories_products where category_id = 1)
-philip
Philip H. wrote:
Any idea how I can accomplish this?
complicated, but it needs to be SQL.
Then something like…
select * from products where id not in (select product_id from
categories_products where category_id = 1)
-philip
thanks a lot, that worked great!
Philip H. wrote:
I have tried the following and non of them worked:
Product.find(:all, :conditions => “categories.id != 1”, :include =>
:categories)
Product.find(:all, :conditions => “categories_products.category_id !=
1”, :include => :categories)
Each of those still returned products in the category.id = 1
Any idea how I can accomplish this?
@products_not_in_category_1 = Product.find(:all, :include =>
:categories).map {|p| p.categories.include?(1) ? nil : p}.compact
Not very efficient if you have a lot of products/categories, but that
should work I think… or something along those lines.
-philip
Yeah I can’t do that because of the way I search models. It’s
complicated, but it needs to be SQL.