rails/activerecord/test/models/citation.rb
Rafael Mendonça França 2dd81877a4
Fix has_many_inversing with touch: true on a belongs_to association with inverse
`has_many_inversing` adds records to a has_many association. It does so
with destroyed records, too. So if a child was destroyed with a `touch:
true` association on the parent *and* the parent was not loaded, it
tried to load the parent to touch it. While loading the parent it added
the child record to the parent's has_many association. The logic doing
this always set the child's parent id – even if it was correct/the same
already. But since the child is destroyed, it resulted in a
`FrozenError`.

This commit prevents doing the unnecessary setting of the identical id
and therefore fixes this error.

Fixes #40943 by not doing an unneeded attribute set.

Closes #40969.

[Markus Doits + Rafael Mendonça França]
2021-01-07 22:15:24 +00:00

8 lines
244 B
Ruby

# frozen_string_literal: true
class Citation < ActiveRecord::Base
belongs_to :book, foreign_key: :book1_id, inverse_of: :citations, touch: true
belongs_to :reference_of, class_name: "Book", foreign_key: :book2_id
has_many :citations
end