在after_initialize和before_create回调之间

时间:2015-03-25 10:55:18

标签: ruby-on-rails

我有Booking的模型has_many: appointments。创建Booking后,我也会创建一些Appointments

Appointments有一个属性date,需要在创建后填充。例如。 before_save :set_date

然后我需要在创建Booking时进行验证,以检查约会是否是连续的,这需要每次约会的日期。

  1. Booking初始化
  2. Appointments初始化
  3. Appointments设置了date属性
  4. 验证Booking
  5. 问题是,当验证发生时,日期尚未设置。这是有道理的,因为date设置在before_save Appointment上,而保存尚未发生。

    所以我将before_save更改为after_initialise。在这种情况下,填充日期所需的Appointment的其他属性(特别是Block的外键)尚未分配给约会。

    我希望在设置外键的after_initialise之间但在before_save之前进行回调。这可能吗?

2 个答案:

答案 0 :(得分:2)

我建议使用before_validation回调。如果您添加新的验证并且您需要设置此日期,则不希望每次都调用set_date,或者搜索首次调用的验证。

答案 1 :(得分:0)

我通过在验证开始时显式调用set_date函数来解决这个问题,而不是通常调用它。