ActiveRecord: adding children to a has_many parent

1 view
Skip to first unread message

bataras

unread,
Dec 26, 2006, 10:16:27 PM12/26/06
to Ruby on Rails: Talk
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?

Mark Reginald James

unread,
Dec 26, 2006, 11:14:40 PM12/26/06
to rubyonra...@googlegroups.com
bataras wrote:
>
> 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!

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.

bataras

unread,
Dec 27, 2006, 1:37:36 AM12/27/06
to Ruby on Rails: Talk
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.

Reply all
Reply to author
Forward
0 new messages