Wrong number of arguments to find_by_sql?

Hi,

I'm trying to run a query that returns columns from different tables and that joins a couple of tables. Here it is

                @result = EcOrder.find_by_sql["select u1.ship_to_first_name, u1.ship_to_last_name, u1.ship_to_street, u1.ship_to_state, u1.ship_to_zip, u1.ship_to_city, u1.ship_to_country, u1.phone, u1.work_phone, u1.work_phone_extension, u1.email, u2.email, u2.fax, u1.fax from ec_orders o, users u1, users u2 where o.user_id = u1.id and u1.user_id = u2.id and o.id = ?", ec_order_id]

I didn't know what model to use, since I'm joining a couple. Anyway the above produces the error:

ArgumentError in OrderController#submit wrong number of arguments (0 for 1)

Any clarifications are appreciated, - Dave

You need to put parentheses around your argument.

@result = EcOrder.find_by_sql(["select u1.ship_to_first_name, u1.ship_to_last_name, u1.ship_to_street, u1.ship_to_state, u1.ship_to_zip, u1.ship_to_city, u1.ship_to_country, u1.phone, u1.work_phone, u1.work_phone_extension, u1.email, u2.email, u2.fax, u1.fax from ec_orders o, users u1, users u2 where o.user_id = u1.id and u1.user_id = u2.id and o.id = ?", ec_order_id])

...should do.

Thanks, Matt. I have a follow-up question. When I try and access a column from the result set

                @result = EcOrder.find_by_sql(["select u1.ship_to_first_name, u1.ship_to_last_name, u1.ship_to_street, u1.ship_to_state, u1.ship_to_zip, u1.ship_to_city, u1.ship_to_country, u1.phone, u1.work_phone, u1.work_phone_extension, u1.email, u2.email, u2.fax from ec_orders o, users u1, users u2 where o.user_id = u1.id and u1.user_id = u2.id and o.id = ?", ec_order_id])                 @fax = @result.fax

I get the error

NoMethodError in OrderController#submit undefined method `fax' for :Array

How do I get the column "fax" out of my result set? - Dave

@result is an array. You can either do @result.first.fax or iterate over the whole thing with

@result.each do |r|   do something with r.fax end

Peace, Phillip