我有一个继承ActiveRecord::Base
的模型,数据库中包含以下属性:
# id :integer not null, primary key
# next_datetime :datetime
# first_datetime :datetime
# created_at :datetime not null
# updated_at :datetime not null
此模型中的对象应该像这样实例化:
scheduler.new(first_datetime: DateTime.new(2016, 1, 1))
当创建对象(不一定保存到数据库)时,我想将first_datetime
中的属性复制到next_datetime
,这样当我访问{时,我永远不会得到nil
{1}}。
我尝试使用my_scheduler.next_datetime
回调,但是在执行此代码时,质量指定的属性尚不可用。
如何初始化此属性?任何帮助将不胜感激。
答案 0 :(得分:2)
我唯一能想到的是覆盖initialize
ActiveRecord::Base
方法,以便在模型的超类结束处理后添加这个小的自定义。
这可以通过以下方式实现:
def initialize(attributes = nil, options = {})
super
next_datetime ||= first_datetime
end
希望这可以帮到你!
答案 1 :(得分:0)
您是否使用过after_initialize?:
after_initiation :set_next_datetime
def set_next_datetime
if new_record?
next_datetime ||= first_datetime
end
end
答案 2 :(得分:0)
使用tap可能有所帮助:
scheduler.new(first_datetime: DateTime.new(2016, 1, 1)).tap do |record|
record.next_datetime = record.first_datetime
end