关键字super在Rails模型初始化中评估为nil。为什么?

时间:2015-12-17 16:33:22

标签: ruby-on-rails

我有一个模型,它继承自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}}评估为supernilself的实例,但MyModel的评估结果为super

当然,nil之类的行会因情况出现预期错误而爆炸:super.initialize(*a)初始化&#39;呼吁nil:NilClass`

为什么会发生这种情况?

红宝石:2.2.2 rails:4.2.0

1 个答案:

答案 0 :(得分:2)

super是一个关键字,用于调用超类对当前方法的定义;由于超类的initialize定义为nil,因此您会收到错误。

但是,我假设你真正想要做的只是用给定的参数调用该方法,你可以用以下方法完成:

def initialize(*a)
  super(*a)
  # etc
end