Forum: Ruby on Rails make members of a has_many share a reference to their belongs_to

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.
8cf6d14fe2c55b53ad7f0301ad379010?d=identicon&s=25 I. E. Smith-Heisters (Guest)
on 2008-12-11 04:41
(Received via mailing list)
Hi all,

I have a model (Foo) with a has_many association to another model
(Bar). Each Bar backreferences Foo, and calls a method on Foo that is
expensive to call the first time per-instance (Foo#pricey). If all the
instances of Bar referenced the same instance of Foo, the cost of
calling Foo#pricey would only have to be paid once. Alas, this is not
so:

>> foo = Foo.find :first
>> foo.object_id
=> 70169390687560
>> foo.bars[0].foo.object_id
=> 70169406714940
>> foo.bars[1].foo.object_id
=> 70169407605180

I haven't looked into the problem too much, since I thought this was
perhaps a simple, common problem for which solution patterns already
exist. Are there? Alternatively, can you recommend a good starting
point for developing a pattern?

Thanks,
Ian
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-11 10:00
(Received via mailing list)
On 11 Dec 2008, at 03:40, I. E. Smith-Heisters wrote:

>>> foo = Foo.find :first
> point for developing a pattern?
>

There's certainly not an established solution to this, but there are
various experiments such as
http://github.com/h-lame/parental_control/tree/master

Fred
8cf6d14fe2c55b53ad7f0301ad379010?d=identicon&s=25 Ian Smith-Heisters (Guest)
on 2008-12-13 07:35
(Received via mailing list)
On Thu, Dec 11, 2008 at 12:59 AM, Frederick Cheung
<frederick.cheung@gmail.com> wrote:
>> instances of Bar referenced the same instance of Foo, the cost of
>>
>
Cool, thanks Fred. Unfortunately the one relationship he doesn't
support is belongs_to <-> has_many :( No matter, i solved the problem
the old fashioned way by just optimizing the hell out of it. Which is,
of course, preferable in many ways. Still, that's some neat code and
could well come in handy in other ways.

Thanks again,
ISH
This topic is locked and can not be replied to.