ruby-on-rails - Rails 3 中的嵌套表单更新将外键设置为 NULL

标签 ruby-on-rails ruby ruby-on-rails-3 nested-forms formtastic

我正在尝试使用格式化嵌套表单更新用户记录。其结构如下

User 
   Admin
   Address

当我发送表单以更新详细信息时,在更新地址或管理记录时,user_id(外键)被设置为 NULL。这是发送的数据,看起来没问题。

Parameters: {
             "utf8"=>"✓", "authenticity_token"=>"some token", 
             "user"=>{
                 "id"=>"16",
                 "first_name"=>"User", 
                 "last_name"=>"Name", 
                 "email"=>"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="295c5a4c5b4748444c694e44484045074a4644" rel="noreferrer noopener nofollow">[email protected]</a>", 
                 "password"=>"[FILTERED]", 
                 "password_confirmation"=>"[FILTERED]", 
                 "address_attributes"=>{
                      "main_phone"=>"131231233", 
                      "address1"=>"Address 1 Line", 
                      "address2"=>"Address 2 Line", 
                      "city"=>"Lansing",  
                      "state"=>"Michigan", 
                      "zip"=>"48823", 
                      "user_id"=>"16"
                 }, 
                 "admin_attributes"=>{
                      "company_id"=>"2", 
                      "user_id"=>"16"
                 }, 
                 "roles_mask"=>"1", 
                 "user_id"=>"16"
                 }, 
                 "commit"=>"Update User Roles", 
                 "company_id"=>"2", 
                 "id"=>"16"
           }

用户模型

class User < ActiveRecord::Base
  has_one :address, :dependent => :destroy, :inverse_of => :user
  has_one :admin, :dependent => :destroy, :inverse_of => :user      
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :roles_mask, :terms_of_use,:id
  attr_accessible :owner_attributes, :admin_attributes, :address_attributes, :client_attributes
  accepts_nested_attributes_for :owner, :admin, :client, :address  
end

管理模型

class Admin < ActiveRecord::Base
  belongs_to :company
  belongs_to :user, :inverse_of => :admin

  attr_accessible :company_id, :user_id
end

*地址模型

class Address < ActiveRecord::Base
  belongs_to :user, :inverse_of => :address


  attr_accessible :address1, :user_id, :address2, :city, :state, :zip, :main_phone, :cell_phone
end

你能帮我解决这个问题吗?谢谢。

已更新模型详细信息。我删除了验证以使其简短。

最佳答案

尝试改正

accepts_nested_attributes_for :owner, :admin, :client, :address

在您的用户模型中

accepts_nested_attributes_for :owner, :client
accepts_nested_attributes_for :admin, :address, :update_only => true

关于ruby-on-rails - Rails 3 中的嵌套表单更新将外键设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6420417/

相关文章:

ruby - 如何在 Ruby 中列出有效的 Iconv 编码?

iphone - 为什么 Rails 在我的 iPhone 上以开发模式缓存资源?

ruby-on-rails - Rails验证...多个:on options?

ruby-on-rails - 了解Ruby on Rails中的assert_difference

ruby - 如何从 url 获取文件扩展名?

ruby - 拆分 CSV 文件,同时忽略逗号并使用 Ruby 返回引号内的字符

mysql - 开发中连接 Sphinx MySQL 时遇到问题

ruby-on-rails - rake 中止未初始化的常量 "Computers"

ruby-on-rails - 查找对象集合是否具有相同的给定属性值

ruby-on-rails - 在 rspec/capybara 集成测试中,如何将 N(顺序)步骤实现为 N 'it...do' 个示例?