ruby-on-rails – RubyRails:alias_method实践

ruby-on-rails – RubyRails:alias_method实践,第1张

概述我试图覆盖Rails的“fields_for”方法,我目前正在做如下: module ActionView::Helpers::FormHelper include ActionView::Helpers::FormTagHelper alias_method :original_fields_for, :fields_for def fields_for(<my argument 我试图覆盖Rails的“fIElds_for”方法,我目前正在做如下:

module ActionVIEw::Helpers::FormHelper  include ActionVIEw::Helpers::FormTagHelper  alias_method :original_fIElds_for,:fIElds_for  def fIElds_for(<my arguments>)    # Some extra stuff    # ...    output.safe_concat original_fIElds_for(<my other arguments>)  endend

功能很好,但我开始怀疑我使用alias_method并不是最优雅的.最特别的是,如果我要将此功能打包到gem中,并且还有另一个宝石覆盖了fIElds_for,我是否会想到我的新fIElds_for或备用fIElds_for会被跳过?

假设是这样,将一些额外的功能用于现有的rails方法的正确方法是什么?

干杯…

解决方法 这看起来就像alias_method_chain的意思(虽然我不知道它是否适用于模块 – 只在AR :: Base上使用它)

你只是这样做

module ActionVIEw::Helpers::FormHelper    include ActionVIEw::Helpers::FormTagHelper    alias_method_chain :fIElds_for,:honeypot    def fIElds_for_with_honeypot(<my arguments>)        # Some extra stuff        # ...        output.safe_concat fIElds_for_without_honeypot(<my other arguments>)    endend

有趣的想法这样做到fIElds_for,但它应该工作.

关于a_m_c你应该注意的一个小争议 – 这篇文章总结得很好http://erniemiller.org/2011/02/03/when-to-use-alias_method_chain/

在这种情况下,我认为你不能使用super,因为你想修改form_for而不修改调用代码/视图.

总结

以上是内存溢出为你收集整理的ruby-on-rails – Ruby / Rails:alias_method实践全部内容,希望文章能够帮你解决ruby-on-rails – Ruby / Rails:alias_method实践所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1274254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存