[OT maybe] ActiveRecord curious behaviour

A

Alexandru E. Ungur

Hi all,

I appologise if this question is offtopic, hopefully it isn't though...

I have:
Forum has_many :comments

so obviously, I access the comments collection as
some_forum.comments

check its type with:
some_forum.comments.class # => Array

ok, that I expected, so I want to use Array#find on it, right?
some_forum.comments.find {...}

but oops, I get:
ActiveRecord::RecordNotFound: Couldn't find Comment without an ID

Hmm, that find is not the find I expected to find ;-) Looks like
an AR#find to me... but on an Array? It's not like I need SQL to
find certain elements of an Array... so I find this behaviour very
interesting. Am I doing something wrong here ? I can find the
element(s) I want from it, by iterating over it and selecting them,
but not by using find.

BTW, it's Rails 1.1.6/AR 1.14.4 I'm having this behaviour on, haven't
tested it on other versions.


Thank you in advance,
Alex
 
D

David Goodlad

Hi Alex

Hi all,

I appologise if this question is offtopic, hopefully it isn't though...

I have:
Forum has_many :comments

so obviously, I access the comments collection as
some_forum.comments

check its type with:
some_forum.comments.class # => Array

ok, that I expected, so I want to use Array#find on it, right?
some_forum.comments.find {...}

but oops, I get:
ActiveRecord::RecordNotFound: Couldn't find Comment without an ID

Hmm, that find is not the find I expected to find ;-) Looks like
an AR#find to me... but on an Array? It's not like I need SQL to
find certain elements of an Array... so I find this behaviour very
interesting. Am I doing something wrong here ? I can find the
element(s) I want from it, by iterating over it and selecting them,
but not by using find.

BTW, it's Rails 1.1.6/AR 1.14.4 I'm having this behaviour on, haven't
tested it on other versions.


Thank you in advance,
Alex

It would probably be ore appropriate to ask this on the rails-users
mailing list, rather than this one.

However, here's why you're seeing this behavior. An AR association,
when accessed, returns a proxy object that looks like an Array, but
has some extra methods: 'find', 'build', etc. For example:

comments = some_forum.comments
comments.class # => Array
comments.build :foo => 'bar' # :build is obviously not a method on Array

If you want to use Array#find or Array#find_all on an AssociationProxy
object, you can call #detect and #select instead.

Dave
 
A

Alexandru E. Ungur

sender: "David Goodlad" date: "Fri, Jan 26, 2007 at 08:16:30AM +0900" <<<EOQ
Hi,
It would probably be ore appropriate to ask this on the rails-users
mailing list, rather than this one.
Ok then, sorry for the noise, and a warm thank you for the
explanation :)

Have a nice day everyone,
Alex
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top