Почему мои рельсы form_for с вложенными моделями не запомнят значения формы?
У меня есть помощник по имени user_order
который возвращает экземпляр Order
, Order
принимает вложенные атрибуты для User
а также Address
, Моя (сокращенная) форма выглядит так:
<%= 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:
belongs_to :user
accepts_nested_attributes_for :user
validates_associated :user
attr_accessible :user
Код контроллера:
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
Значения для user.email не запоминаются, когда форма отправляется с ошибками и форма перерисовывается.
Почему это может быть?
2 ответа
Решение
После экспериментов я понял, что это работает:
контроллер:
def new
@order = Order.new
@order.build_user
end
Посмотреть:
<%= form_for @order do |order_fields| %>
<%= order_fields.order.fields_for :user do |user_fields| %>
<%= user_fields.text_field :email %>
<% end %>
<% end %>
Вы пробовали этот код контроллера с консоли rails и убедились, что он работает?
Показывает ли ваш файл development.log, что он на самом деле пытается выполнить оператор вставки SQL при отправке формы?
Редактировать: при перечитывании это звучит как вставка stmt происходит. НМ второй вопрос, хотя там еще может быть некоторая информация.