我有一个模型,它继承自ActiveRecord :: Base
class MyModel < ActiveRecord::Base
# Irrelevant code ...
def initialize(*a)
super.initialize(*a)
@myattr = {}
end
# Irrelevant code ...
end
当调用MyModel.new时(实际上,我调用someobj.my_models.new
,因为my_models与MyModel是1:N关系),在新创建的实例的上下文中调用initialize
,但是{{ 1}}评估为super
(nil
是self
的实例,但MyModel
的评估结果为super
。
当然,nil
之类的行会因情况出现预期错误而爆炸:super.initialize(*a)
初始化&#39;呼吁nil:NilClass`
为什么会发生这种情况?
红宝石:2.2.2 rails:4.2.0答案 0 :(得分:2)
super
是一个关键字,用于调用超类对当前方法的定义;由于超类的initialize
定义为nil,因此您会收到错误。
但是,我假设你真正想要做的只是用给定的参数调用该方法,你可以用以下方法完成:
def initialize(*a)
super(*a)
# etc
end