Forum: Ruby on Rails accepting and passing args to find

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.
Ryan E. (Guest)
on 2006-02-16 00:00
I have a method that I want to accept args like the "find" method does
and I need to pass those args along to a find call.

# in controller action:

@projects = Project.find_allowed(session[:user], :order => "name")

# start of the model method:

def self.find_allowed(owner, *args)
  projects = self.find_all(args)
  ...

No matter how I try to pass those args along I get something like the
following error:

ActiveRecord::StatementInvalid: Mysql::Error: #42S22Unknown column
'ordername' i
n 'where clause': SELECT * FROM projects WHERE (ordername)

I've tried self.find_all(*args), I've tried doing various conversions
and nothing seems to work. I'm sure I'm missing something simple, I just
can't find what it is. Thanks for any help anybody can offer.
Ezra Z. (Guest)
on 2006-02-16 01:57
(Received via mailing list)
On Feb 15, 2006, at 2:00 PM, Ryan E. wrote:

>   projects = self.find_all(args)
>   ...
>

def self.find_allowed(owner, *args)
     projects = self.find_all(*args)

Since you are *splatting the args ito the method, you need to *splat
them into find. then it will work as you want it to.

Cheers-

-Ezra Z.
Yakima Herald-Republic
WebMaster
http://yakimaherald.com
509-577-7732
removed_email_address@domain.invalid
Ryan E. (Guest)
on 2006-02-16 14:14
Ezra Z. wrote:

> def self.find_allowed(owner, *args)
>      projects = self.find_all(*args)

Thanks, but that was one of the things I already tried that didn't work.
I don't know exactly how find_all is implemented, but I discovered that
when I change it to:

self.find(:all, *args)

...it works. Strange.
Ezra Z. (Guest)
on 2006-02-16 17:49
(Received via mailing list)
On Feb 16, 2006, at 4:14 AM, Ryan E. wrote:

>
> self.find(:all, *args)
>
> ...it works. Strange.
>


Yeah you're right. I didn't use find_all in my test as I always use
find :all . So I shouldn't have assumed find_all worked.

Cheers-
-Ezra Z.
WebMaster
Yakima Herald-Republic Newspaper
removed_email_address@domain.invalid
509-577-7732
This topic is locked and can not be replied to.