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. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ben Johnson 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. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Philip Hallstrom 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. > > -philipYeah I can''t do that because of the way I search models. It''s complicated, but it needs to be SQL. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> 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?@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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> Philip Hallstrom 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.Then something like... select * from products where id not in (select product_id from categories_products where category_id = 1) -philip --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Philip Hallstrom 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) > > -philipthanks a lot, that worked great! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---