I have a helper called user_order
which returns an instance of Order
. Order
accepts nested attributes for User
and Address
. My (abbreviated) form looks like this:
<%= form_for user_order, :url => checkouts_path, :method => :post do |order| %>
<%= order.fields_for :user_attributes do |user| %>
<%= user.text_field :email %>
<% end %>
<% end %>
Order.rb model code:
belongs_to :user
accepts_nested_attributes_for :user
validates_associated :user
attr_accessible :user
Controller code:
def new
@order = user_order # user_order is a method to get order from session
end
def create
@order = user_order
if @order.update_attributes(params[:order])
redirect_to @order
else
render :new
end
end
Values for user.email are not remembered when the form is submitted with errors and the form is re-rendered.
Why might that be?
After experimenting, I figured out that this works:
controller:
def new
@order = Order.new
@order.build_user
end
view:
<%= form_for @order do |order_fields| %>
<%= order_fields.order.fields_for :user do |user_fields| %>
<%= user_fields.text_field :email %>
<% end %>
<% end %>