设置ActiveRecord模型属性

时间:2011-10-27 17:22:30

标签: ruby-on-rails ruby activerecord

我试图覆盖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 =会自动设置吗?

由于

1 个答案:

答案 0 :(得分:2)

不要覆盖ActiveRecord的initialize;使用after_initialize回调。

有关详细信息,请参阅this SO post

我没有看到@contract_date的任何内容,所以我不确定你的意思。如果没有模型定义,很难说更多,我们不知道@data@contract_date是什么,或者“工作”意味着什么。请记住,ActiveRecord的DB属性不是简单的@ - 样式属性。