gpt4 book ai didi

ruby-on-rails - 覆盖 rails helpers 以访问原始文件

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

我想使用 rails 熟悉的助手,但功能略有改变。在我看来,我希望能够做类似的事情:

module AwesomeHelper
#... create alias of stylesheet_link_tag to old_stylesheet_link_tag
def stylesheet_link_tag(*args)
if @be_awesome
awesome_stylesheet_link_tag *args
else
old_stylesheet_link_tag *args
end
end
end

在我看来,我有三个选择:

  1. Monkey patching: 重新打开 rails helper 模块。如果 Rails 团队更改了他们的辅助模块的名称,我的代码就会变得脆弱。并非无法克服,但并不理想。
  2. 使用不同的方法名称:尝试坚持使用共轨接口(interface)可能是我的败笔。我的更改可能会引起其他开发人员的困惑
  3. 分离方法(新):不确定这是否可行,或者它是否具有与 1 相同的缺点。将对此进行研究,但这可能是一个很好的起点。

所以这里的问题是,我是坚持使用这些次优解决方案中的一个,还是还有其他我没有考虑过的方法?如果我选择选项 3,有没有一种方法可以在不直接访问 rails 辅助模块的情况下做到这一点?

(注意:我已经删除了上下文,因为它没有给问题增加任何内容。)

最佳答案

有比您列出的任何选项更好的方法。只需使用 super:

module AwesomeHelper
def stylesheet_link_tag(*sources)
if @be_awesome
awesome_stylesheet_link_tag *sources
else
super
end
end
end

在 AwesomeHelper 中重写 stylesheet_link_tag 将确保,当 stylesheet_link_tag 被调用时,Ruby 会在它到达 ActionView::Helpers 之前在方法查找路径中遇到它: :AssetTagHelper。如果 @be_awesometrue,您将负责并立即停止一切,否则,不带括号的对 super 的调用将透明将所有参数传递给 Rails 实现。这样您就不必担心 Rails 核心团队对您进行调动!

关于ruby-on-rails - 覆盖 rails helpers 以访问原始文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471535/

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