Help with "find_by_sql" statement

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 "

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

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

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

Don't forget to pluralize the table name (product should be products above).