在ActiveRecord回调链中,before_save在before_create之前被触发:
before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
after_commit/after_rollback问题是我有一个设置reference_number的before_create。我有一个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是已更改的属性?
发布于 2018-09-19 12:44:13
您可以添加一个类似于if changes.any? || new_record?的条件,但您需要确保该属性已实际设置。
https://stackoverflow.com/questions/52395040
复制相似问题