我试图覆盖ActiveRecord模型中的初始化,我只看到一件我无法理解那里发生的事情。我写了这个初始化方法:
def initialize params={}
super params
@data = Date.strptime(params[:data], '%d/%m/%Y') if not params[:data].nil?
self.number = generate_contract_number(params[:unit]) if not params[:unit].nil?
self
end
鉴于generate_contract_number有效,Date.strptime也可以。我的问题是:为什么当我做self.number =数字设置,当我做@ number =数字没有设置。但是当我对@ contract_date =同样有效时,它会起作用,而self.contract_date =会自动设置吗?
由于
答案 0 :(得分:2)
不要覆盖ActiveRecord的initialize
;使用after_initialize
回调。
有关详细信息,请参阅this SO post。
我没有看到@contract_date
的任何内容,所以我不确定你的意思。如果没有模型定义,很难说更多,我们不知道@data
或@contract_date
是什么,或者“工作”意味着什么。请记住,ActiveRecord的DB属性不是简单的@
- 样式属性。