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
-~----------~----~----~----~------~----~------~--~---

Reply via email to