Hello all, Currently I am having a controller with several actions. A client perform some kind of wizard to create a persisted object (ActiveRecord). So step1, step2, step3 and finally saves the object to DB in step 4. Each step takes ask for a couple of info from the client which is part of the end persisted object. Basically it follows the logic below: step1 -> name, address step2 -> validate address against a third party site step3 -> email and other info step4 -> saves all the above information to DB Each step correspond to an action. All the 4 steps are in the same controller. Step2 depends on step1 thus the wizard type process. I built the above and it is working like a charm. However, I am wondering about validation. I want to use ActiveRecord validation. What would you suggest? Javascript for each step + ACtiveRecord validation at step4 that would redirect to an "edit" page which would contain all 4 steps in 1 "edit" action? I will probably go for that but was wondering if anybody had any suggestion to produce a validation mechanism per step. Thanks, Carl --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
def my_action return unless request.post? case params[:stage] when ''1'' session[:my_record] = Model.new(params[:model]) if not session[:my_record].valid? flash[:notice] = "Invalid name" if session[:my_record].errors.invalid?(:name) flash[:notice] = "Invalid address" if session[:my_record].errors.invalid?(:address) end when ''2'' return unless session[:my_record] if not MyThirdPartyValidation.valid_something (params[:model][:something]) session[:my_record].errors.add :something, "is invalid." else session[:my_record][:something] = params[:model][:something] end end end No perfect as it''ll validates every column for each stage you call valid?, I''m not sure of a better method in my current tired state :) Be sure your code can handle a malicious user skipping stages, i.e the return unless session[:my_record] stuff. On 04/09/06, Carl-Gustaf Harroch <charroch-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > Hello all, > > Currently I am having a controller with several actions. A client > perform some kind of wizard to create a persisted object > (ActiveRecord). So step1, step2, step3 and finally saves the object to > DB in step 4. Each step takes ask for a couple of info from the client > which is part of the end persisted object. Basically it follows the > logic below: > > step1 -> name, address > step2 -> validate address against a third party site > step3 -> email and other info > step4 -> saves all the above information to DB > > Each step correspond to an action. All the 4 steps are in the same > controller. Step2 depends on step1 thus the wizard type process. > > I built the above and it is working like a charm. However, I am > wondering about validation. I want to use ActiveRecord validation. > What would you suggest? Javascript for each step + ACtiveRecord > validation at step4 that would redirect to an "edit" page which would > contain all 4 steps in 1 "edit" action? I will probably go for that > but was wondering if anybody had any suggestion to produce a > validation mechanism per step. > > Thanks, > Carl > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Validate using AR and the :if option. E.g., validates_presence_of :foo, :if => Proc.new(|wizard| wizard.step > 1) Note that the wizard parameter passed into the block is the instance of your model class, so the model itself needs to understand what step it is on. HTH Carl-Gustaf Harroch wrote:> > > Hello all, > > Currently I am having a controller with several actions. A client > perform some kind of wizard to create a persisted object > (ActiveRecord). So step1, step2, step3 and finally saves the object to > DB in step 4. Each step takes ask for a couple of info from the client > which is part of the end persisted object. Basically it follows the > logic below: > > step1 -> name, address > step2 -> validate address against a third party site > step3 -> email and other info > step4 -> saves all the above information to DB > > Each step correspond to an action. All the 4 steps are in the same > controller. Step2 depends on step1 thus the wizard type process. > > I built the above and it is working like a charm. However, I am > wondering about validation. I want to use ActiveRecord validation. > What would you suggest? Javascript for each step + ACtiveRecord > validation at step4 that would redirect to an "edit" page which would > contain all 4 steps in 1 "edit" action? I will probably go for that > but was wondering if anybody had any suggestion to produce a > validation mechanism per step. > > Thanks, > Carl > > > > >-- View this message in context: http://www.nabble.com/advice-on-validation-tf2217672.html#a6143757 Sent from the RubyOnRails Users forum at Nabble.com. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
hi there, just curious, how did you solve your problem? I want to do something similar, say User model, use it for registration (new users) and profile update (existing users). I ask new users for terms, passowrds, email etc. when one is updating his profile I don''t want him to change password from the "my profile" page (have special page to change password) and don''t want him to accept terms one more time (this one is easy, :on => ''create'' helps) but what about other fields, should I use 2 models - User, UserPassword? any advice on this one? what happends with db record when User.password is nil? Thanks Carl-Gustaf Harroch wrote:> Hello all, > > Currently I am having a controller with several actions. A client > perform some kind of wizard to create a persisted object > (ActiveRecord). So step1, step2, step3 and finally saves the object to > DB in step 4. Each step takes ask for a couple of info from the client > which is part of the end persisted object. Basically it follows the > logic below: > > step1 -> name, address > step2 -> validate address against a third party site > step3 -> email and other info > step4 -> saves all the above information to DB > > Each step correspond to an action. All the 4 steps are in the same > controller. Step2 depends on step1 thus the wizard type process. > > I built the above and it is working like a charm. However, I am > wondering about validation. I want to use ActiveRecord validation. > What would you suggest? Javascript for each step + ACtiveRecord > validation at step4 that would redirect to an "edit" page which would > contain all 4 steps in 1 "edit" action? I will probably go for that > but was wondering if anybody had any suggestion to produce a > validation mechanism per step. > > Thanks, > Carl-- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---