[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

[OT maybe] ActiveRecord curious behaviour

Alexandru E. Ungur

1/25/2007 5:53:00 PM

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

2 Answers

David Goodlad

1/25/2007 11:17:00 PM

0

Hi Alex

On 1/25/07, Alexandru E. Ungur <alexandru@globalterrasoft.ro> wrote:
> 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


--
Dave Goodlad
dgoodlad@gmail.com or dave@goodlad.ca
http://david.g...

Alexandru E. Ungur

1/26/2007 8:55:00 AM

0

>>> 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