Forum: Ruby on Rails wrong number of arguments (2 for 1)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Paul S. (Guest)
on 2006-04-11 16:40
(Received via mailing list)
Hi,

Im having trouble figuring out how to query my database in ruby and
i'm hoping someone can help me out.

I'd like to find all my departments that match a permalink passed from
the url. The department must also match a particular category, also
passed through the url.

I have written the following code. But unfortunatley I get an error
"wrong number of arguments (2 for 1)"

category = params[:category]
department = params[:department]

@departments = Department.find(:all, :conditions => ["permalink = ?",
department])
@department = @departments.find(:all, :conditions => ["category = ?",
category])


If anyone could shed some light on this it would be greatly appreciated.
Thanks,
Paul.

--
Richard W. (Guest)
on 2006-04-11 17:04
(Received via mailing list)
>@departments = Department.find(:all, :conditions => ["permalink = ?",
>department])
>@department = @departments.find(:all, :conditions => ["category =
>?", category])

Is this an exact copy of the code?  The find :all will return a hash
even if there is only one result row.  So in the above @department will
always be a hash.

If you want only one department then use find :first which returns a
scaler of the row.

As an aside you can also combine the two statements:

@department = Department.find(:first, :conditions => ["permalink = ? and
category = ?", department, category])
Jean-François (Guest)
on 2006-04-11 17:10
(Received via mailing list)
Hello Paul,

> @departments = Department.find(:all, :conditions => ["permalink = ?",
> department])
> @department = @departments.find(:all, :conditions => ["category = ?", category])

@departments is an array of Department objects created by
the class method Department#find.

In the second line, since @departments is an array, you are using
Enumerable#find which require 0 or 1 argument and 1 block.
So that's not the find method you want to use, and that's not the
right way to use Enumerable#find as well :)

so you'd better do :

@departments = Department.find(:all,
:conditions => ["permalink = :department  AND category = :category",
params ])

   -- Jean-François.
This topic is locked and can not be replied to.