- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我刚刚阅读有关 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/
我将项目升级到 Rails 5。当我运行 rspec我收到警告 DEPRECATION WARNING: alias_method_chain is deprecated. Please, use M
我正在使用 Ruby on Rails 3.2.13,我想正确使用 alias_method_chain :build, :option_name 语句,因为我遇到了一个奇怪的错误。也就是说,...
我们都知道,如果目标类是由模块组成的,你可以在新模块中调用super。但是如果它是一个类中的普通方法呢? class Logger def message(msg) puts msg
我正在开发我的网络应用程序,我想覆盖一个方法,例如,如果原始类是 class A def foo 'original' end end 我想重写 foo 方法,可以这样做 class
如果这两个方法只是同义词,为什么人们还要费心写额外的字符“_chain”? 最佳答案 没有。 alias_method 是 Ruby 的标准方法。 alias_method_chain 是一个 Rai
我尝试阅读了各种博客文章,这些文章试图解释 alias_method_chain 以及使用和不使用它的原因。我特别注意: http://weblog.rubyonrails.org/2006/4/26
NoMethodError:ActionDispatch::Request:Class 的未定义方法“alias_method_chain” 我在安装 wiselinks gem 后遇到这个问题。 R
我正在更新我的 Rails 应用程序,我需要重构使用 alias_method_chain 的方法,因为它已被弃用。消息说按照 Rails 5 的建议使用 module#prepend。这是我正在尝试
我在理解 alias_method/alias_method_chain 时遇到一点困难。我有以下代码: module ActionView::Helpers module FormHelper
我刚刚阅读有关 Rails 3 的 Gems/Plugin 开发并遇到了 this post这表示不再使用 alias_method_chain。我可以看到该方法仍然存在于 activesupport
我刚刚克隆了一个 github 仓库 https://github.com/maxitron93/p2pcollective.com ,当我在探索这个很棒的 p2p 借贷应用程序时,我遇到了一个错误
我想通过模块在模型的方法上“添加”一些代码,当它被包含时。我想我应该使用 alias_method_chain,但我不知道如何使用它,因为我的“别名方法”是以“=”符号结尾的方法之一: class M
故事模式 刚开始学习 RoR,但在短时间内我需要添加类似于 Loading images from LDAP 的功能(不兼容的版本)到我们的项目中。项目被放弃,我找不到任何相关信息/文档,所以我在这里
我想自定义方法link_to_issue的application_helper Redmine 与 alias_method_chain 的原则,以保持 Redmine 代码在插件中干净,但我遇到了问
我正在使用 twitter bootstrap 创建一个应用程序.我正在使用 Font Awesome将图标添加到各个地方,通常是链接。到目前为止,我一直在使用全局助手。这是简化版本: # app/h
我是一名优秀的程序员,十分优秀!