Why won't my rails form_for with nested models won't remember form values?
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
acce开发者_运维问答pts_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?
Have you tried that controller code from the rails console and made sure it works?
Does your development.log file show it is actually attempting an sql insert statement on form submit?
Edit: on reread, it sounds like an insert stmt is happening. nm the second question, although there still may be some info in there.
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 %>
精彩评论