在before_save之前触发before_create

时间:2018-09-18 21:48:01

标签: ruby-on-rails

在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是已更改的属性?

1 个答案:

答案 0 :(得分:0)

您可以添加诸如if changes.any? || new_record?之类的条件,但是您需要确保该属性已实际设置。