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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hmmm.. Are Cat and Dog associated to the Person model?> there may not always be a @cat or @dogMeaning 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Yuck What''s wrong with def valid_or_nil?(obj) obj.nil? or obj.valid? end Blog: http://random8.zenunit.com/ Learn rails: http://sensei.zenunit.com/ On 08/04/2009, at 9:14 PM, sshefer <shai.shefer-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---