我需要将属性initial_collection_amount
的默认值设置为基于另一个属性amount
的计算。 initial_collection_amount
为零,直到记录被持久保存,因此after_create
触发验证错误:
after_create :set_initial_collection_amount
def set_initial_collection_amount
self.initial_collection_amount ||= self.amount * 0.15
end
结果类似于initial_collection_amount cannot be blank
。
使用initial_collection_amount
将after_initialize
设置为0,然后运行上面的after_create
似乎很草率,实际上甚至无法按我认为的方式工作。我为每个终端输出添加了一个puts
,如下所示:
after_initialize :set_initial_collection_amount_to_0
after_create :set_initial_collection_amount_x_15
def set_initial_collection_amount_to_0
puts "a"
self.initial_collection_amount ||= 0
end
def set_initial_collection_amount_x_15
puts "b"
total = self.amount * 0.15
self.initial_collection_amount ||= total
end
其中的终端输出在puts语句中显示a
15次。
我该怎么做?我只希望保存一个属性。如果我将allow_nil: true
添加到验证中,它将另存为空白。
答案 0 :(得分:1)
如果您需要在创建记录之前立即设置值,那么before_create
事件似乎更适合您的用例。