我想在创建对象时设置数据。目前我使用两种方式:
使用before_create
Application
覆盖初始化
before_create :set_number
def set_number
self.number = Random.new.rand(1..1000)
end
它们之间有什么区别,还有更好的解决方案吗?
感谢。
答案 0 :(得分:0)
initialize
上触发 Object#new
。在触发任何回调方法之前。更重要的是,在所有验证发生后调用before_create
。
我建议不要覆盖initialize
。相反,您可以使用after_initialize
挂钩。
但是,每次进行MyObject.new
时,我都不会花费宝贵的计算周期来生成随机数(除非您明确需要这样做)。您可能希望在持久保存对象时生成它。所以我会用:
before_validation :set_number, on: :create