ruby-on-rails – Ruby 2.0改变了SimpleDelegator的行为吗?
发布时间:2020-12-17 02:22:16 所属栏目:百科 来源:网络整理
导读:我已将Rails 3.2应用程序从 Ruby 1.9.3-p448升级到2.0.0-p451. 所有的自动化测试都通过,第一个,错误: NameError:未定义的局部变量或方法’subject_path’用于#…’ Administration :: EntityAssociationsController :: EntityAssociationsResponder:0x007
我已将Rails 3.2应用程序从
Ruby 1.9.3-p448升级到2.0.0-p451.
所有的自动化测试都通过,第一个,错误: NameError:未定义的局部变量或方法’subject_path’用于#…’< Administration :: EntityAssociationsController :: EntityAssociationsResponder:0x007fe007338d78> 这里的代码有点涉及,但实际上提供了subject_path方法,因为EntityAssociationsResponder继承自SimpleDelegator,并使用当前的Rails控制器进行初始化,该控制器将subject_path实现为受保护的方法. 该方法受到保护,因此Rails不会将其作为控制器操作. 这曾经很好. Ruby 2.0是否改变了这种行为,因此只委托了公共方法?我在文档中找不到任何对此类更改的引用. 更新: 为了解决这个错误,我将SimpleDelegator子类化为: class Responder < SimpleDelegator # Override method_missing so protected methods can also be called. def method_missing(m,*args,&block) target = self.__getobj__ begin if target.respond_to?(m) || target.protected_methods.include?(m) target.__send__(m,&block) else super(m,&block) end ensure $@.delete_if {|t| %r"A#{Regexp.quote(__FILE__)}:#{__LINE__-2}:"o =~ t} if $@ end end end 解决方法
是的,有一个变化,目前有一个
opened issue左右.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |