【问题标题】:Defining method_missing on Active record in rails 4 throws SystemStackError: stack level too deep on attributes在 rails 4 中的 Active 记录上定义 method_missing 会引发 SystemStackError: stack level too deep on attributes
【发布时间】:2013-04-18 16:29:00
【问题描述】:

我最近将我的应用升级到 rails 4.0 和 ruby​​ 2.0 我无法理解为什么我的 method_missing 定义不起作用。我很确定我没有做任何与以前不同的事情。

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

这是我的课程:

歌曲.rb

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

事件.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 == 'Song' 时,我希望能够调用 event.song 问题出在self.eventable_type 上,它会触发堆栈溢出。

我在这里错过了什么?

【问题讨论】:

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


    【解决方案1】:

    method_missing 触发时,似乎还没有定义eventable_type 方法(Rails 中的某些方法在您第一次调用它们时通过method_missing 动态定义)。

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

    【讨论】:

    • 您,先生,是我今天的个人英雄。
    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2015-07-03
    • 2017-08-06
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多