2
중첩 된 폼이 한 폼에서 사용자와 해당 주소 간의 연결을 만들기 위해 노력하고 있습니다.간단한 양식의 레일에 중첩 된 폼 매개 변수
문제 I "m를 보는 유효성 검사가 실패 할 때마다, 내부 주소 필드 양식을 다시 채우기, 또는 유효성 검사 오류가 표시되지 않을 것입니다 여기에
의 형식은 다음과 같습니다.<%= simple_form_for(@user, :url => register_and_checkout_path, :html => {:class => "form-horizontal clearfix"}) do |f| %>
<p>New Member & 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