hello, I''d like to get user data in one template. The relations are: user has_one user_adress user has_one user_account The following template doesn''t save any (valid) data. I think the submit button doesn''t work. All 3 models should be validated when save is called. <div class="shop-form"> <%= error_messages_for ''user'' %> <%= error_messages_for ''user_adress'' %> <%= error_messages_for ''user_account'' %> <fieldset> <legend>Please enter your data: </legend> <% form_for :user do |form| %> <label for="user_first_name">firstname:</label> <%= form.text_field :first_name, :size => 40 %> </p> <p> <label for="user_surname">surname:</label> <%= form.text_field :surname, :size => 40 %> </p> <p> <label for="user_birthdate">date of birth</label><br/> <%= date_select ''user'', ''birthdate'', :include_blank => true, :order => [:day, :month, :year], :start_year => 1900, :default => :blank %> </p> <p> <label for="user_email">email:</label> <%= form.text_field :email, :size => 40 %> </p> <p> <label for="user_username">username:</label> <%= form.text_field :username, :size => 40 %> </p> <p> <label for="user_password">password:</label> <%= form.password_field :password, :size => 40 %> </p> <p> <label for="user_password_confirmation">passwort confirmation:</label> <%= form.password_field :password_confirmation, :size => 40 %> </p> <% end %> <br/> <legend>Your adress:</legend> <% form_for :user_adress do |form| %> <p> <label for="user_adress_street">street:</label> <%= form.text_field :street, :size => 40 %> </p> <p> <label for="user_adress_nr">number:</label> <%= form.text_field :nr, :size => 40 %> </p> <p> <label for="user_adress_postcode">postcode:</label> <%= form.text_field :postcode, :size => 40 %> </p> <p> <label for="user_adress_city">City:</label> <%= form.text_field :city, :size => 40 %> </p> <% end %> <br/> <legend>Your payment details:</legend> <% form_for :user_account do |form| %> <p> <label for="user_account_bank">credit institution:</label> <%= form.text_field :bank, :size => 40 %> </p> <p> <label for="user_account_bank_code">bank code:</label> <%= form.text_field :bank_code, :size => 40 %> </p> <p> <label for="user_account_account_number">account number:</ label> <%= form.text_field :account_number, :size => 40 %> </p> <% end %> <br/> <%= submit_tag "Register", :class => "submit" %> </fieldset> </div> --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
This creates 3 forms, but no submit tag in any of them. Try using this: form_for :user, @user, :url => {:action => :new} do |form| #....your fields for user fields_for :user_address, @user_address do |fields| #...your fields for user_adress in the following form: # fields.textarea (arguments) end fields_for :user_account, @user_account do |fields| #same as for user_adress end <%= submit_tag "Register", :class => "submit" %> end :user is the class of the object of interest @user is an actual instance (which could have another name like @new_user) :url points the form to it''s target same for the fields_for, but subforms do not get a target. Have Fun Skade -- 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?hl=en -~----------~----~----~----~------~----~------~--~---
there''s also a problem in my controller. Neither does it save anything to the database nor validate the models. The template is register.rhtml. I wrote it as you said. def register @user = User.new end def new if @user.save @user.adress = @user_adress @user.account = @user_account flash[:notice] = ''Registration was successful.'' redirect_to :action => ''index'' else render :action => ''register'' end end --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
I forgot to say that the relations are dependent. And not everyone does have an account. So, if there''s nothing in the account field, the account shouldn''t be saved. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Martin Luy wrote:> there''s also a problem in my controller. Neither does it save anything > to the database nor validate the models. > > The template is register.rhtml. I wrote it as you said. > > def register > @user = User.new > end > > def new > if @user.save > @user.adress = @user_adress > @user.account = @user_account > flash[:notice] = ''Registration was successful.'' > redirect_to :action => ''index'' > else > render :action => ''register'' > end > endPlease consider that all Rails operations are stateless. You need to instantiate a new User in def new. You will find the contents of the form via params(:user). Try: def new @user = User.new(params(:user)) @user.address.build(params(:user_adress)) @user.account.build(params(:user_account)) if @user.save! flash[:notice] = ''Registration was successful.'' redirect_to :action => ''index'' else render :action => ''register'' end end I hope, you get the point, i can''t check the code right now. -- 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?hl=en -~----------~----~----~----~------~----~------~--~---
Martin Luy wrote:> I forgot to say that the relations are dependent. > > And not everyone does have an account. So, if there''s nothing in the > account field, the account shouldn''t be saved.class User < ActiveRecord::Base validates_associated :account, :address end -- 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?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks for your help, I got to the following working code. 2 more questions after the code. In the controller: def register @user = User.new(params[:user]) @user.time_of_registration = Time.now @user.user_adress = UserAdress.new(params[:user_adress]) @user.user_account = UserAccount.new(params[:user_account]) if request.post? and @user.save flash[:notice] = ''Registration was successful.'' redirect_to :action => ''login'' end end register.rhtml: <div class="shop-form"> <%= error_messages_for ''user'' %> <fieldset> <legend>Please enter your data: </legend> <% form_for :user, @user do |form| %> <p> <label for="user_first_name">First name:</label> <%= form.text_field :first_name, :size => 40 %> </p> ... <% fields_for :user_adress, @user_adress do |fields| %> ... <% end %> <p>If you want to pay using debit, please enter your bank account: </p> <% fields_for :user_account, @user_account do |fields| %> <p> <label for="user_account_bank"> credit institution:</label> <%= fields.text_field :bank, :size => 40 %> </p> <p> <label for="user_account_bank_code">bank code:</label> <%= fields.text_field :bank_code, :size => 40 %> </p> <p> <label for="user_account_account_number">account number:</ label> <%= fields.text_field :account_number, :size => 40 %> </p> <% end %> <%= submit_tag "Register", :class => "submit" %> <% end %> </fieldset> </div> The user model: class User < ActiveRecord::Base has_one :user_adress, :dependent => true has_one :user_account, :dependent => true validates_associated :user_account, :user_adress ... end The account model: class UserAccount < ActiveRecord::Base belongs_to :user validates_presence_of :bank, :bank_code, :account_number validates_numericality_of ... validates_inclusion_of ... validates_format_of ... end Questions: Validation of user_account and user_adress looks like "User adress is invalid". I would like to show the errors for the children classes explicitly. How can I change "validate_presence_of" in UserAccount so that either all or no fields are entered? Thanks, Luma --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---