ActiveRecord, has_many association and object graphs

I am still using Rails 1.0…

I have a simple has_many association:

class Round < ActiveRecord::Base
has_many :scores
end

class Score < ActiveRecord::Base
belongs_to: round
end

When I do something like this (contrived for the sake of clarity):

rr = Round.find(params[:id])
rr.scores.each { |s|
logger.debug(“object_id=#{s.round.object_id}”)
}

I see a database query on the “rounds” table with each iteration of the
loop. I also see different instances of “Round” objects being created
for each call to “s.round”

Based on the docs, I guess this is the intended behavior but I am
curious why calls to “s.round” don’t just refer to the parent object
“rr”. In this particular case, the parent object is right there for the
taking since the child objects were fetched through it. It also seems
like the intuitive thing to do and would certainly help with
performance. So what am I missing?

I want to make sure that I understand this before I go ahead and rip
apart my model (or implement some sort of hack) to accomodate this
behavior. Speaking of which, is there a recommended way to deal with
this? I could see how eager loading might help but, that seems
heavy-handed and unecessary given that I have the parent object right
there anyway. Also, I’d like all of the child “Score” objects to refer
to the same instance of the parant “Round” object.

Thanks for reading this far.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs