1

我有一个名为user_order的帮手,它返回一个Order的实例。 Order接受UserAddress的嵌套属性。我(略)形式如下:为什么我的rails form_for嵌套模型不会记住表单值?

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

控制器代码:

为user.email
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 

值不记得当窗体提交时出现错误,表单重新呈现。

为什么会这样?

+1

我认为你需要发布你的控制器代码算出这个 – Matthew

+0

请显示您的模型之间的关系。 – dombesz

+0

我更新了包含模型/控制器的代码。 –

回答

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

你有没有尝试从轨道控制台的控制器代码,并确保它的工作?

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

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

+0

我可以成功提交表单,并且一切正常,因此我确信控制器代码正在运行。只是当我有错误,它不显示存储的值。 –

+0

但是,当您使用与表单相同的参数运行它时,是否会删除电子邮件参数?我发现这是有用的放在application.html.erb,fyi的底部:<%= debug(params)if Rails.env.development? %> – erictheavg

相关问题