在rails 4中的Active记录中定义method_missing会抛出SystemStackError:属性上的堆栈级别太深

时间:2013-04-18 16:29:01

标签: ruby ruby-on-rails-4 method-missing

我最近将我的应用程序升级到rails 4.0和ruby 2.0 我在理解为什么我的method_missing定义不起作用时遇到了问题。我很确定我的做法与以往不同。

具体来说,我正在尝试创建一个方法,让ActiveRecord对象通过多态关系响应对它belongs_to的对象的调用。

以下是我的课程:

song.rb

class Song < ActiveRecord::Base
    has_many :events, :as => :eventable
end

event.rb

class Event < ActiveRecord::Base

    belongs_to :eventable, :polymorphic => true

    def method_missing(meth, *args, &block)
       if meth.to_s ==  self.eventable_type
          self.eventable
       else
          super
       end
    end

end

我希望能够在eventable_type of event =='Song'时调用event.song 问题出在self.eventable_type上,这会触发堆栈溢出。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

似乎eventable_type方法在method_missing触发时尚未定义(Rails中的某些方法在第一次调用时通过method_missing动态定义)。

我会尝试不同的方法来获得你想要的价值;也许self.attributes["eventable_type"]会起作用吗?