gpt4 book ai didi

ruby-on-rails - Ruby 2.0 是否改变了 SimpleDelegator 的行为?

转载 作者:数据小太阳 更新时间:2023-10-29 07:34:04 26 4
gpt4 key购买 nike

我已将 Rails 3.2 应用程序从 Ruby 1.9.3-p448 升级到 2.0.0-p451。

所有自动化测试都通过了,除了一个,但有错误:

NameError: undefined local variable or method 'subject_path' for #...'<Administration::EntityAssociationsController::EntityAssociationsResponder:0x007fe007338d78>

这里的代码有点复杂,但本质上是subject_path提供方法是因为 EntityAssociationsResponder继承自 SimpleDelegator ,并使用当前的 Rails Controller 进行初始化,该 Controller 实现了 subject_path作为一种 protected 方法。

该方法受到保护,因此它不会被 Rails 作为 Controller 操作获取。

这曾经工作得很好。 Ruby 2.0 是否已更改此行为以便仅委托(delegate)公共(public)方法?我在文档中找不到任何关于此类更改的引用。

更新:

为了修复这个错误,我将 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, *args, &block)
else
super(m, *args, &block)
end
ensure
$@.delete_if {|t| %r"\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}:"o =~ t} if $@
end
end

end

最佳答案

是的,有变化,目前有一个 opened issue关于这个。

关于ruby-on-rails - Ruby 2.0 是否改变了 SimpleDelegator 的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22385796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com