1

我有一个名为的助手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 的值。

为什么会这样?

4

2 回答 2

0

您是否尝试过 Rails 控制台中的控制器代码并确保它有效?

您的 development.log 文件是否显示它实际上是在尝试在表单提交时使用 sql insert 语句?

编辑:重读时,听起来好像正在发生插入 stmt。nm第二个问题,虽然那里可能还有一些信息。

于 2011-09-16T19:22:19.450 回答
0

经过实验,我发现这是可行的:

控制器:

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 %>
于 2011-10-15T08:19:44.973 回答