0
그래서 1) 변경 사항을 저장하지 않고 대신 2) 이러한 변경 사항으로 감사를 저장해야합니다. 두 번째 부분은 send_for_audit
메서드에 의해 수행되지만 false를 반환하면 새 Audit 인스턴스가 만들어지지 않고 Article 인스턴스에 대한 변경 내용이 저장되지 않습니다 (단순화 된 코드가 있음).before_save 콜백에서 모델 변경 저장을 방지하는 방법
class Article < ActiveRecord::Base
before_save :send_for_audit, if: :changed?
has_many :audits, as: :auditable
private
def send_for_audit
audits.destroy_all
Audit.create!(auditable: self, data: changes)
end
end
class Audit < ActiveRecord::Base
attr_accessible :auditable, :auditable_id, :auiditable_type, :data
store :data
belongs_to :auditable, polymorphic: true
def accept
object_class = self.auditable_type.constantize
object = object_class.find_by_id(auditable_id)
data.each do |attr, values|
object.update_column(attr.to_sym, values.last)
end
self.destroy
end
end
나는 그들이 트리거되는 순서가 트릭을 할 것입니다 생각 추가 before_save 콜백 추가 시도했다 :
before_save :send_for_audit, if: :changed?
before_save :revert_changes
def send_for_audit
audits.destroy_all
Audit.create!(auditable: self, data: changes)
@need_to_revert = true
end
def revert_changes
if @need_to_revert
@need_to_revert = nil
false
end
end
을하지만 어쨌든 내가 더 감사 예 .. 어떤 생각 없어 어떻게 내가 원하는 결과를 얻을 수 있을까?