Rails:为rails方法添加功能的正确方法

时间:2012-03-25 18:49:17

标签: ruby-on-rails ruby

我刚刚开始修改扩展rails框架,作为一个实验,我想我会在form_for帮助器中添加一些额外的信息。具体来说,当调用form_for时,我想生成一个额外的h1标签,例如:

# regular form_for <form> opening tag
<h1>Woohoo! It's added!</h1>
# tags fed into form_for via &proc
# form_for close <form> tag

目前我添加了一个/ lib文件,打开ActiveRecord :: FormHelper并覆盖“form for”。不用说写出整个form_for方法只添加了一行添加的狗是丑陋的...但我不能调用super()因为,好吧,而不是继承我想要super()的方法,我刚刚在/ lib中覆盖了它。

所以,假设我固执地希望通过相同的form_for标记(而不是例如extended_form_for)调用该功能,那么回调到我覆盖的原始form_for方法的标准方法是什么? alias_method_chain?以为在我搞一些可能糟糕的做法之前我会问。如果有任何坚强的退伍军人可以举一个例子我会很感激。

干杯

2 个答案:

答案 0 :(得分:5)

您可以覆盖form_for中的ApplicationHelper

module ApplicationHelper
  def form_for(*)
    content_tag(:h1, "Woohoo! It's added!") + super
  end
end

答案 1 :(得分:1)

alias_method_chain是迄今为止覆盖方法的最简单方法,同时仍然可以调用原始方法。所以在你的lib文件中你会想要这样的东西:

def form_for_with_header(...)
  form_for_without_header(...)
  content_tag(:h1, "Header tag here")
  # etc...
end