# Wrong number of arguments (2 for 1)

**URL:** <https://www.ruby-forum.com/t/wrong-number-of-arguments-2-for-1/57493>\
**Category:** Rails\
**Created:** [April 11, 2006, 2:40pm UTC](https://www.ruby-forum.com/t/wrong-number-of-arguments-2-for-1/57493 "2006-04-11T14:40:18Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![azgar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/eb8c5e/32.png) [@azgar](https://www.ruby-forum.com/u/azgar)\
**Post date:** [April 11, 2006, 2:40pm UTC](https://www.ruby-forum.com/t/wrong-number-of-arguments-2-for-1/57493/1 "2006-04-11T14:40:18Z")

</div>

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.

–

---

<div class="post-metadata">

**Author:** ![azgar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/eb8c5e/32.png) [@azgar](https://www.ruby-forum.com/u/azgar)\
**Post date:** [April 11, 2006, 3:04pm UTC](https://www.ruby-forum.com/t/wrong-number-of-arguments-2-for-1/57493/2 "2006-04-11T15:04:52Z")

</div>

> @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])

---

<div class="post-metadata">

**Author:** ![azgar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/eb8c5e/32.png) [@azgar](https://www.ruby-forum.com/u/azgar)\
**Post date:** [April 11, 2006, 3:10pm UTC](https://www.ruby-forum.com/t/wrong-number-of-arguments-2-for-1/57493/3 "2006-04-11T15:10:57Z")

</div>

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.
