ドキュメントをコーディネートした後、使用するコールバックを理解するのが難しいです。Rails ActiveRecordコールバック:存在する場合に更新する、存在しない場合に作成する
擬似コード:child_id場合
とoutage_idが
変更を変更した場合の関係(INSERT文)を作成
を
存在しませんoutage_id関係(UPDATEステートメント)
これらの挿入と更新は3つのモデルがありcollection_check_boxes
を介して処理されています。関係、停電、および子供。
class Outage < ApplicationRecord
has_many :relationships
has_many :children, through: :relationships
end
class Child < ApplicationRecord
end
class Relationship < ApplicationRecord
belongs_to :outage
belongs_to :child
validate :check_if_exists, if: :outage_id_changed?
private
def check_if_exists
Relationship.where(child_id: self.child_id).update_all(outage_id: self.outage_id)
end
end
私が今直面してる問題はUPDATE
は常に、どんな権利INSERT
前に発生していないということです。 UPDATE
は、レコードが存在し、outage_id
が変更された場合にのみ発生します。
私がここで間違っていることについての洞察は、わかります。あなたはこれを試すことができ
ここで 'after_save'フックを見るとレコードの' saved_changes'にアクセスしてそのロジックを構築できます新しい属性と比較して – neongrau
@neongrauありがとう、それを検討します。 – DnfD