我的模特:

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:错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28496106/

10-13 02:18