Search code examples
ruby-on-railsruby-on-rails-3.1form-fornested-form-for

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
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?


Solution

  • 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 %>