У меня есть две модели (давайте позвоним тогда A
и B
).Rails before_update обратный вызов с вложенными атрибутами
A
has_many
b
s и B
belongs_to
A
.
class A < ApplicationRecord
has_many :bs, dependent: :destroy, inverse_of: :a
accepts_nested_attributes_for :bs, reject_if: :all_blank, allow_destroy: true
validates_associated :bs
end
class B < ApplicationRecord
belongs_to :a, inverse_of: :bs
before_update :do_something, unless: Proc.new { |b| b.a.some_enum_value? if a }
def do_something
self.some_field = nil
end
end
Кроме того, B
имеет before_update
функцию обратного вызова, которая устанавливает some_field
всухую еслиA
имеет some_enum_value
набор.
Поскольку это соотношение используется на вложенной форме, что before_update
из B
только вызывается, если я обновлю форму атрибута B
. Если я изменю только значение A
, этот обратный вызов не вызывается.
Как я могу позвонить B
before_update
, когда обновлен A
?
Заранее спасибо.
С точки зрения масштабирования вы должны быть очень осторожны, когда делаете что-то вроде этого. Операции записи являются дорогостоящими и обычно вы можете решить эту проблему путем проксирования или использования соединений. – max
Большое спасибо, Макс. – ThalesMiguel