gpt4 book ai didi

ruby-on-rails - rails 3 : alias_method_chain still used?

转载 作者:数据小太阳 更新时间:2023-10-29 06:24:24 25 4
gpt4 key购买 nike

我刚刚阅读有关 Rails 3 的 Gems/Plugin 开发并遇到了 this post这表示不再使用 alias_method_chain。我可以看到该方法仍然存在于 activesupport-3.0.0/lib/active_support/core_ext/module/aliasing.rb 中。

我还应该在 Rails 3 中使用 alias_method_chain 吗?

this是否仍然反射(reflect)了 Rails 3 中想要修改 ActiveRecord 的 gem/插件的最佳实践?

最佳答案

不,它已被巧妙地使用模块中的方法覆盖和 super 关键字所取代。

基本上,您在包含的模块中定义原始函数,并在另一个包含的模块中覆盖它。当您在覆盖函数中调用 super 时,它会调用原始函数。但有一个陷阱。您必须包括基本模块之后包括扩展模块,并且按照您希望链接发生的顺序。

class Something
module Base
def my_method
# (A) original functionality
end
end

module PreExtension
def my_method
# (B) before the original
super # calls whatever was my_method before this definition was made
end
end

module PostExtension
def my_method
super # calls whatever was my_method before this definition was made
# (C) after the original
end
end

include Base # this is needed to place the base methods in the inheritance stack
include PreExtension # this will override the original my_method
include PostExtension # this will override my_method defined in PreExtension
end

s = Something.new
s.my_method
#=> this is a twice extended method call that will execute code in this order:
#=> (B) before the original
#=> (A) the original
#=> (C) after the original

瑞安·贝茨 Railscasts谈论how this is used in the Rails Routing code .我建议观看它和他的其他截屏视频。他们有能力将编织祖母变成 Rails 大师。

附言:致谢 Peeja纠正我原来答案中的一个基本错误。谢谢。

关于ruby-on-rails - rails 3 : alias_method_chain still used?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689736/

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