2012-12-02 47 views
2

我試圖獲得一個嵌套的窗體,用於在一個窗體中創建用戶和他們的地址之間的關聯。用簡單的形式嵌套在窗體中的參數

的問題,我「米看到的是,每當驗證失敗,內部地址字段形式不再植,或顯示驗證錯誤

這裏的形式:

<%= simple_form_for(@user, :url => register_and_checkout_path, :html => {:class => "form-horizontal clearfix"}) do |f| %> 
<p>New Member &amp; Guest</p> 
<small>Mandatory fields marked*</small> 
    <%= f.error_notification %> 
    <%= f.input :is_checkout, :as => :hidden, :input_html => { :value => true } %> 
     <%= f.input :first_name, :input_html => {:class => "input-xlarge"} %> 
     <%= f.input :last_name, :input_html => {:class => "input-xlarge"} %> 
     <%= f.input :email, :input_html => {:class => "input-xlarge", :placeholder => "[email protected]"} %> 

    <%= simple_fields_for (:address) do |a| %> 
     <%= a.input :phone1, :label => "Contact number", :input_html => {:class => "input-xlarge"} %> 
     <p class="uppercase">Your Address</p> 
     <%= a.input :address_1, :label => "Street Address", :input_html => {:class => "input-xlarge"} %> 
     <%= a.input :address_2, :label => false, :input_html => {:class => "input-xlarge"} %> 
     <%= a.input :address_3, :label => false, :input_html => {:class => "input-xlarge"} %> 
     <%= a.input :suburb, :input_html => {:class => "input-xlarge"} %> 
     <%= a.input :state, :input_html => {:class => "input-xlarge"} %> 
     <%= a.input :postcode, :label => "Postcode/zipcode", :input_html => {:class => "input-xlarge"} %> 
     <%= a.input :country, :priority => [ "Australia", "New Zealand", "Unites States", "United Kingdom" ] %> 

    <% end %> 
     <p>Become a valued member</p> 
     <%= f.input :password, :input_html => {:class => "input-xlarge"} %> 
     <%= content_tag(:button, :class => 'btn btn-large btn-success floatright') do %> <%= content_tag :i, '', :class => 'icon-white icon-shopping-cart' %> Register and Checkout <% end %> 
    <% end %> 
</div> 

和我在嘗試閱讀PARAMS(這是一個大訂單控制器的一部分創建方法)

if params[:is_register] 
     Rails.logger.debug {"Registering before checking out"} 
     @user = Member::User.new(params[:member_user]) 
     @user.address = Member::Address.new(params[:address]) 
     Rails.logger.debug {"address params " +params[:address].to_yaml } 
     @user.pending_order = Checkout::Order.new() 
     @user.pending_order.status = 'P' 
     Rails.logger.debug {"Saving the new user record " + @user.to_yaml} 
     Rails.logger.debug {"Saving the new user address record " + @user.address.to_yaml} 
    end 

    Rails.logger.debug {"Value of user " + @user.to_yaml} 

    respond_to do |format| 
     if params[:is_login] and user 
     format.html { render :shipping_billing } 
     format.json { render json: @order, status: :created, location: @order } 
     elsif params[:is_register] and @user and @user.save and @user.address.save 
     Rails.logger.debug {"Saved new customer account and address"} 
     format.html { render :shipping_billing, :notice => "Your account was successfully registered"} 
     format.json { render json: @order} 
     else 
     format.html { render action: "new", :notice => "Could not log in" } 
     format.json { render json: @checkout_order.errors, status: :unprocessable_entity } 
     end 
    end 

最後是相關的模型:

class Member::User < ActiveRecord::Base 
    authenticates_with_sorcery! 
    # attr_accessible :title, :body 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :address, :address_attributes, :first_name, :last_name, :order_attributes, :pending_order, :is_checkout 

    attr_accessor :is_checkout 


    # Orders and Order History 
    has_many :orders, :class_name => "Checkout::Order" 
    has_one :pending_order, 
      :class_name => "Checkout::Order", 
      :conditions => ['status = ?', 'P'] 


    has_many :addresses, :class_name => "Member::Address" 
    has_one :primary_billing_address, 
      :class_name => "Member::Address", 
      :conditions => ['is_primary_billing = ?',true] 
    has_one :primary_shipping_address, 
      :class_name => "Member::Address", 
      :conditions => ['is_primary_shipping = ?',true] 
    has_one :address, 
      :class_name => "Member::Address", 
      :conditions => ['is_primary_billing = ?', true] 

    accepts_nested_attributes_for :address 
    accepts_nested_attributes_for :pending_order 

    validates_presence_of :email, :password, :first_name, :last_name 
    validates_confirmation_of :password 
    validates_uniqueness_of :email 

end 

回答

0

對於其他人在尋找這個問題的答案,我想到了,這是非常簡單的錯誤,花了所有的時間花在試圖弄清楚這是這條線的形式。

<%= f.simple_fields_for :address do |a| %> 

請注意,simple_fields_for現在被容器表單構建器引用。