ruby-on-rails - Accepts_nested_attributes_for 引发 ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR

标签 ruby-on-rails activerecord nested-attributes

我的模型:

class Foo < ActiveRecord::Base
  has_many :bars, inverse_of: :foo
  accepts_nested_attributes_for :bars

  ...
end

class Bar < ActiveRecord::Base
  belongs_to :foo, inverse_of: :bars

  ...
end

当我尝试像这样创建记录时:
Foo.create(foo_attribute: value, bars_attirbutes: [{bar_attribute: value}])

我得到:
ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR:  insert or update on table "bars" violates foreign key constraint "bars_foo_id_fkey"
DETAIL:  Key (foo_id)=(14) is not present in table "foos".

所以我猜 ActiveRecord 试图在保存父模型之前保存嵌套模型,因此出现错误。但它为什么要这样做呢?我怎样才能防止它这样做?

最佳答案

我今天遇到了类似的问题。就我而言,问题是因为我通过创建新表将 2 个表合并为 1 个(单表继承),但忘记删除两个旧表。

我还有其他表对这两个旧表具有外键约束。更新或删除那些外键约束,你应该很高兴。

关于ruby-on-rails - Accepts_nested_attributes_for 引发 ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28496106/

相关文章:

ruby-on-rails - 在 Rails 4 中保存之前如何检查现有记录?

ruby-on-rails - Rails 3.1 - :fields_for,:child_index 不递增

ruby-on-rails - 回形针视频倾斜(不保持纵横比)

ruby-on-rails - 权限被拒绝@dir_s_mkdir (Errno::EACCES) - 在应用程序运行时

sql - 用于搜索表单的 Rails 条件查询

mysql - Rails mySQL 中的绑定(bind)参数为空

ruby-on-rails - 启用 rails 的 Rubocop 和 Style/IndentationConsistency

mysql - 如何在 Rails 3.2.x 中关闭 MySQL 严格模式

ruby-on-rails - 如何在 Rails 3 中使用 Draper 装饰嵌套属性(关联)?

ruby - 嵌套形式多对多关系不允许的参数 Rails 4