ActiveRecord: adding children to a has_many parent

given parent.list is a has_many of Child, I’ve found that if I do this:

child = Child.new(...)
parent.list << child

rails will select * all of parent.list before doing the insert of the
new child (if parent.list isn’t already loaded). This is -bad- because
my parent.list is huge.

So instead, I do this:

child = Child.new(...)
child.parent = parent
child.save!

This ensures a single insert and also throws an exception if any DB
constraints are violated, thus ensuring any encompassing transactions
and/or top level logging is handled.

is this generally the right thing to do with rails? I’m a noob coming
from enterprise development in other languages.

Or is there some other magic way to add to parent.list with the above
kind behavior?

bataras wrote:

So instead, I do this:

child = Child.new(…)
child.parent = parent
child.save!

The most terse way would be

parent.list.create(…)

If you want to defer saving you can instead use the “build” method.

–
We develop, watch us RoR, in numbers too big to ignore.

Cool. Thanks. I’ll use that. In one case though, I have to create a new
child that “belongs_to” 2 different kinds of parents. So for that, I’ll
have to use the build method to make it happen in a single insert.