2012-03-25 64 views
0

我剛開始鼓勵擴展rails框架,作爲一個實驗,我想我會在form_for helper中添加一些額外的信息。具體而言,當的form_for叫,我想產生一個額外的h1標籤,如:Rails:爲rails方法添加功能的正確方法

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

目前我添加了打開的ActiveRecord ::表單助手並覆蓋「的形式爲/ lib目錄文件」。不用說只用添加的一行來寫出整個form_for方法是醜陋的,但是我不能調用super(),因爲,而不是從我想要super()的方法繼承,我剛剛在/ lib中覆蓋了它。

因此,假設我固執地希望通過相同的form_for標記(而不是像extended_form_for)調用該功能,那麼調用回原始form_for方法的標準方法是什麼? alias_method_chain?以爲在我遇到一些潛在的糟糕做法之前,我會問。如果有頑固的退伍軍人能舉一個例子,我會很感激。

乾杯

回答

1

alias_method_chain是迄今爲止最簡單的方法覆蓋方法,同時仍然能夠調用原始方法。因此,在你的庫文件,你會想是這樣的:

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

我覺得@唯恐的回答是更軌方式 – 2012-03-26 06:23:26

5

你可以在你的ApplicationHelper覆蓋form_for

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