2016-01-28 47 views
1

我想在创建对象时设置数据。目前我使用两种方法:create_before和rails在初始化之间有什么区别?

使用before_create

before_create :set_number 

def set_number 
    self.number = Random.new.rand(1..1000) 
end 

覆盖初始化

def initialize(attributes = nil, options = {}) 
    super 
    self.number = Random.new.rand(1..1000) 
end 

什么是它们之间的区别,以及有没有更好的解决办法?

谢谢。

回答

0

initializeObject#new上触发。在触发任何回调方法之前。更重要的是,before_create在所有验证发生后都会被调用。我不推荐覆盖initialize。相反,您可以使用after_initialize钩子。

但是,我没有看到花费宝贵的计算周期产生一个随机数,每次你做MyObject.new(除非你明确需要这样做)。你可能想要在持久化对象时生成它。所以我会用:

before_validation :set_number, on: :create

相关问题