Just wanted to say that someone helped me with the solution here:
http://railsforum.com/viewtopic.php?id=29103

Apparently, it's as simple as:

def valid_or_nil?( model )
  model.nil? ? true : model.valid?
end

if @person.valid? & valid_or_nil?(@cat) & valid_or_nil?(@dog)
  Person.transaction do
    @person.save!
    @cat.save! unless @cat.nil?
    @dog.save! unless @dog.nil?
  end
else
  FAIL
end

On Apr 8, 1:17 am, sshefer <shai.she...@gmail.com> wrote:
> Sure.
>
> My scenario is a bit different.
>
> I have an application form that needs to be filled in by a user.  If
> the user is not registered on my site I have a few fields that allow
> the user to quickly enter name and email and their account will be
> created when the application is submitted.  At the same time, the
> application allows a user to pick from a list of documents they've
> uploaded.  However, I also have fields incase a user would like to
> upload a document that is not on the list (to save them the hassle of
> going back, uploading and returning to the application).
>
> Therefore, my application will always have a new @application and
> sometimes a new @user or @document.  The document model is
> polymorphic.  The application belongs_to the user and has a field for
> document_id but I did not create an explicit relationship in the
> model.
>
> Thanks for any help.
>
> On Apr 8, 1:03 am, Ram <yourstruly.vi...@gmail.com> wrote:
>
> > Hmmm.. Are Cat and Dog associated to the Person model?
>
> > > there may not always be a @cat or @dog
>
> > Meaning the parameters for these models will be passed in from the
> > form but they will be empty? In which case you can have a
> > before_validation callback and check if all the params for these
> > models are blank. If they are, then return false. This will still
> > throw a "Cat/Dog is invalid" validation error. That can be handled by
> > hacking into error_messages_for. Its all quite ugly but it works.
> > I can tell you more if you can explain the context better.
>
> > On Apr 7, 2:26 pm, sshefer <shai.she...@gmail.com> wrote:
>
> > > Jim Neath's walkthru (http://jimneath.org/2008/09/06/multi-model-forms-
> > > validations-in-ruby-on-rails/) talks about validating multiple objects
> > > before saving.  His example is below:
>
> > > if @person.valid? & @cat.valid? & @dog.valid?
> > >   Person.transaction do
> > >     @person.save!
> > >     @cat.save!
> > >     @dog.save!
> > >   end
> > > else
> > >   FAIL
> > > end
>
> > > I am trying to do something similar but in my situation there may not
> > > always be a @cat or @dog (there will always be a @person though).
> > > Does anyone know of a way that I can run the same validation but allow
> > > for the conditional presence of the 2 objects?
>
> > > Thanks.
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to