私は2つのモデルを持っています(A
とB
を呼び出します)。ネストされた属性を持つコールバック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
はA
がsome_enum_value
セットを持っている場合はnil にsome_field
を設定before_update
コールバックを持っています。私は属性フォームB
を更新した場合B
からbefore_update
のみが呼び出されていることを、この関係はネストされたフォームに使用されているので
、。私がA
という値の形式だけを変更した場合、そのコールバックは呼び出されません。
A
が更新されると、B
のbefore_update
に電話する方法を教えてください。
ありがとうございます。それは潜在的に悲惨なパフォーマンスの結果をもたらす可能性があるため(ただし、このオプションはhas_many
関係のために存在していません
class B < ApplicationRecord
belongs_to :a, inverse_of: :bs, touch: true
end
あなたはB. を更新するときa.updated_at
を更新します:団体に属しているため
あなたはこのような何かをやったときには本当に注意する必要があるスケーリングの観点から。書き込み操作は高価で、通常はプロキシまたは結合を使用してこれを解決できます。 – max
ありがとう、マックス。 – ThalesMiguel