Rails - Make(Reversed)嵌套表单保存

时间:2012-12-06 17:22:14

标签: ruby-on-rails activerecord

我看到很多关于使用嵌套表单保存的东西,但是所有这些都与我的相反。客户信息belongs_to用户,但我想从客户信息更新用户电子邮件。现在视图正在运行,它只是没有保存。

我定义了以下关系:

class User < ActiveRecord::Base
    has_one :customer_info, dependent: :destroy
  accepts_nested_attributes_for :customer_info
end

class CustomerInfo < ActiveRecord::Base
  belongs_to :user
  attr_accessible :user, :email
  accepts_nested_attributes_for :user
end

以下嵌套表格:

%h1 Editing customer_info

= form_for @customer_info, :validate => true do |f|
  - if @customer_info.errors.any?
    #error_explanation
      %h2= "#{pluralize(@customer_info.errors.count, "error")} prohibited this user from being saved:"
      %ul
        - @customer_info.errors.full_messages.each do |msg|
          %li= msg

  %h2 Your Profile

  = fields_for @user do |i|
    .field
      = i.label :email, 'Email'
      = i.text_field :email

  .field
    = f.label :username, "Username"
    = f.text_field :username

  .actions
    = f.submit 'Next'

3 个答案:

答案 0 :(得分:1)

虽然以这种方式做你想做的事情是一种不寻常的方法,但我们需要知道控制器端的代码是什么。我假设你使用像这样的常用Rails脚手架

def update
  if @customer_info.update_attributes params[:customer_info]
    # the rest of the assumed code
  end
end

如果是这样,请尝试向autosave关系添加belongs_to :user选项,以便在成功保存CustomerInfo后保存它,例如

 belongs_to :user, autosave: true

答案 1 :(得分:0)

如果您使用accepts_nested_attributes_for和attr_accessible,则必须在attr_accessible行中包含user_attributes,否则您将无法更新用户记录

attr_accessible :user_attributes
accepts_nested_attributes_for :user

答案 2 :(得分:0)

事实证明它实际上是通过我一路上做的事来保存,我只是在使用设计,所以不要让我只是更改数据库中的电子邮件,我必须确认。

感谢Ahmad鼓励我查看控制台,以便更好地了解正在发生的事情。