collection.build is the only way that currently exists in active record. You could look into before_add callbacks. They get called with the new record and you could perform your conditional there. Martin Emde Tw: @martinemde
On Fri, Jul 10, 2009 at 6:15 PM, Kerry Foley <[email protected]>wrote: > > Not sure that this is the best way but how about mixing the two? > > c = Child.new(params) > p.children.build(params) unless (some conditional stuff on c) > > Regards, > Kerry > > Glenn Little wrote: > > I'm looking for a way to add new child objects to a parent's has_many > > collection, but without doing an immediate save. > > > > There is build(): > > > > p = Parent.new(stuff) > > p.children.build(params) > > > > But the problem is I'd like to do this conditionally without having to > > pick apart params. I'd do: > > > > c = Child.new(params) > > p.children << c unless (some conditional stuff on c) > > > > or > > > > p.children.push(c) unless (some conditional stuff on c) > > > > but both of those immediately save the child object c. > > > > Lastly, associating the child to the parent via the child: > > > > p = Parent.new(stuff) > > c = Child.new(params) > > c.parent = p unless (some conditional stuff on c) > > > > leaves the parent unaware of the child in its p.children collection. > > > > Is there a clean rails-y idiom I'm missing? > > > > Thanks much... > > > > -glenn > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby -~----------~----~----~----~------~----~------~--~---
