在ActiveRecord回调链中,在before_create之前触发了before_save:
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
after_commit/after_rollback
问题是我有一个before_create,它设置了一个reference_number。我有一个before_save来检查更改的属性并处理更改的属性。由于before_create是在before_save之后调用的,因此该reference_number不被视为已更改的属性,因此我无法对其进行处理:
before_create :set_reference_number
before_save :set_denormalized_fields
def set_reference_number
prefix = determine_type ? 'CO' : 'CA'
self.reference_number = "#{prefix}-#{1}"
end
def set_denormalized_fields
if changes.any?
handle_changed_attributes changes
end
end
当我调用set_denormalized_fields时,如何更改回调链以确保reference_number是已更改的属性?
答案 0 :(得分:0)
您可以添加诸如if changes.any? || new_record?
之类的条件,但是您需要确保该属性已实际设置。