我刚刚开始修改扩展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?以为在我搞一些可能糟糕的做法之前我会问。如果有任何坚强的退伍军人可以举一个例子我会很感激。
干杯
答案 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