I''m trying to write a "find_by_sql" statement that selects with a WHERE clause comparing an attribute to an external value. My statement generates an error on the last line: def department # For menu display @departments = Department.find(:all) @categories = Category.find_all_by_department_id(params[:id], :order => "category_id") # For "@department.title" and "@department.description" display @department = Department.find_by_department_id(params[:id]) # Select products on promotion @products = Product.find_by_sql("SELECT DISTINCT * FROM products " + " INNER JOIN product_categories " + " ON products.product_id = product_categories.product_id " + " INNER JOIN categories " + " ON product_categories.category_id categories.category_id " + " WHERE categories.department_id = ? ", params[:id]) end Help please, Carson --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
On 6 May 2008, at 15:23, Carson wrote:> > I''m trying to write a "find_by_sql" statement that selects with a > WHERE clause comparing an attribute to an external value. My statement > generates an error on the last line: >Well if you just say ''an error'' it''s hard to guess whiich error (and thus what problem you''re encountering). I''d start byt not using a horrible find_by_sql. Product.find :all, :select => ''distinct products.*'', :joins => :categories, :conditions => [''categories.department_id = ?'', params[:id]] does the same thing as your chunk of sql. (assuming there''s a has many through (or a hatbm) from products to categories (via product_categories) Fred> def department > # For menu display > @departments = Department.find(:all) > @categories = Category.find_all_by_department_id(params[:id], > :order => "category_id") > > # For "@department.title" and "@department.description" display > @department = Department.find_by_department_id(params[:id]) > > # Select products on promotion > @products = Product.find_by_sql("SELECT DISTINCT * FROM products " > + > " INNER JOIN product_categories " + > " ON products.product_id = product_categories.product_id > " + > " INNER JOIN categories " + > " ON product_categories.category_id > categories.category_id " + > " WHERE categories.department_id = ? ", params[:id]) > end > > Help please, > > Carson > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Hey Fred: The error message was: "wrong number of arguments (2 for 1)". There are four tables involved: departments, products, product_categories and categories. A department has_many categories. Categories and products have a many-to-many relationship, joined by a product_categories table containing category_id paired with product_id. Selection has two conditions: The product record has an on_department_promotion attribute = ''true'' and the category record has a department_id attribute = prams[:id] Your familiarity with Rails find statements is well beyond mine; so, if you''re so inclined, I cound use help in scripting the find statement. Thanks, Carson On May 6, 9:29 am, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On 6 May 2008, at 15:23, Carson wrote: > > > > > I''m trying to write a "find_by_sql" statement that selects with a > > WHERE clause comparing an attribute to an external value. My statement > > generates an error on the last line: > > Well if you just say ''an error'' it''s hard to guess whiich error (and > thus what problem you''re encountering). I''d start byt not using a > horrible find_by_sql. > > Product.find :all, :select => ''distinct products.*'', :joins > => :categories, :conditions => [''categories.department_id = ?'', > params[:id]] > does the same thing as your chunk of sql. > (assuming there''s a has many through (or a hatbm) from products to > categories (via product_categories) > > Fred > > > > > def department > > # For menu display > > @departments = Department.find(:all) > > @categories = Category.find_all_by_department_id(params[:id], > > :order => "category_id") > > > # For "@department.title" and "@department.description" display > > @department = Department.find_by_department_id(params[:id]) > > > # Select products on promotion > > @products = Product.find_by_sql("SELECT DISTINCT * FROM products " > > + > > " INNER JOIN product_categories " + > > " ON products.product_id = product_categories.product_id > > " + > > " INNER JOIN categories " + > > " ON product_categories.category_id > > categories.category_id " + > > " WHERE categories.department_id = ? ", params[:id]) > > end > > > Help please, > > > Carson- Hide quoted text - > > - Show quoted text ---~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 6 May 2008, at 16:52, Carson wrote:> > Hey Fred: > > The error message was: "wrong number of arguments (2 for 1)". >Ah yes, you need to say find_by_sql([some_sql, substitution_value1, substitution_value2])> There are four tables involved: departments, products, > product_categories and categories. > A department has_many categories. > Categories and products have a many-to-many relationship, joined by a > product_categories table containing category_id paired with > product_id. > > Selection has two conditions: The product record has an > on_department_promotion attribute = ''true'' > and the category record has a > department_id attribute = prams[:id] > > Your familiarity with Rails find statements is well beyond mine; so, > if you''re so inclined, I cound use help in scripting the find > statement. >I think what I gave below is most of the way there, just augment the conditions a bit: [''product_on_department_promotion = ? AND categories.department_id = ?'', true, params[:id]] Fred> Thanks, > > Carson > > On May 6, 9:29 am, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: >> On 6 May 2008, at 15:23, Carson wrote: >> >> >> >>> I''m trying to write a "find_by_sql" statement that selects with a >>> WHERE clause comparing an attribute to an external value. My >>> statement >>> generates an error on the last line: >> >> Well if you just say ''an error'' it''s hard to guess whiich error (and >> thus what problem you''re encountering). I''d start byt not using a >> horrible find_by_sql. >> >> Product.find :all, :select => ''distinct products.*'', :joins >> => :categories, :conditions => [''categories.department_id = ?'', >> params[:id]] >> does the same thing as your chunk of sql. >> (assuming there''s a has many through (or a hatbm) from products to >> categories (via product_categories) >> >> Fred >> >> >> >>> def department >>> # For menu display >>> @departments = Department.find(:all) >>> @categories = Category.find_all_by_department_id(params[:id], >>> :order => "category_id") >> >>> # For "@department.title" and "@department.description" display >>> @department = Department.find_by_department_id(params[:id]) >> >>> # Select products on promotion >>> @products = Product.find_by_sql("SELECT DISTINCT * FROM >>> products " >>> + >>> " INNER JOIN product_categories " + >>> " ON products.product_id = product_categories.product_id >>> " + >>> " INNER JOIN categories " + >>> " ON product_categories.category_id >>> categories.category_id " + >>> " WHERE categories.department_id = ? ", params[:id]) >>> end >> >>> Help please, >> >>> Carson- Hide quoted text - >> >> - Show quoted text - > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Don''t forget to pluralize the table name (product should be products above). On May 6, 12:01 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On 6 May 2008, at 16:52, Carson wrote: > > > > > Hey Fred: > > > The error message was: "wrong number of arguments (2 for 1)". > > Ah yes, you need to say find_by_sql([some_sql, substitution_value1, > substitution_value2]) > > > > > There are four tables involved: departments, products, > > product_categories and categories. > > A department has_many categories. > > Categories and products have a many-to-many relationship, joined by a > > product_categories table containing category_id paired with > > product_id. > > > Selection has two conditions: The product record has an > > on_department_promotion attribute = ''true'' > > and the category record has a > > department_id attribute = prams[:id] > > > Your familiarity with Rails find statements is well beyond mine; so, > > if you''re so inclined, I cound use help in scripting the find > > statement. > > I think what I gave below is most of the way there, just augment the > conditions a bit: > [''product_on_department_promotion = ? AND categories.department_id > = ?'', true, params[:id]] > > Fred > > > Thanks, > > > Carson > > > On May 6, 9:29 am, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > wrote: > >> On 6 May 2008, at 15:23, Carson wrote: > > >>> I''m trying to write a "find_by_sql" statement that selects with a > >>> WHERE clause comparing an attribute to an external value. My > >>> statement > >>> generates an error on the last line: > > >> Well if you just say ''an error'' it''s hard to guess whiich error (and > >> thus what problem you''re encountering). I''d start byt not using a > >> horrible find_by_sql. > > >> Product.find :all, :select => ''distinct products.*'', :joins > >> => :categories, :conditions => [''categories.department_id = ?'', > >> params[:id]] > >> does the same thing as your chunk of sql. > >> (assuming there''s a has many through (or a hatbm) from products to > >> categories (via product_categories) > > >> Fred > > >>> def department > >>> # For menu display > >>> @departments = Department.find(:all) > >>> @categories = Category.find_all_by_department_id(params[:id], > >>> :order => "category_id") > > >>> # For "@department.title" and "@department.description" display > >>> @department = Department.find_by_department_id(params[:id]) > > >>> # Select products on promotion > >>> @products = Product.find_by_sql("SELECT DISTINCT * FROM > >>> products " > >>> + > >>> " INNER JOIN product_categories " + > >>> " ON products.product_id = product_categories.product_id > >>> " + > >>> " INNER JOIN categories " + > >>> " ON product_categories.category_id > >>> categories.category_id " + > >>> " WHERE categories.department_id = ? ", params[:id]) > >>> end > > >>> Help please, > > >>> Carson- Hide quoted text - > > >> - Show quoted text ---~--~---------~--~----~------------~-------~--~----~ 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@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---