2012-03-25 9 views
0

Ich fange gerade an, mit der Erweiterung des Rails-Frameworks zu experimentieren, und als ein Experiment dachte ich, ich würde einige zusätzliche Informationen innerhalb des form_for-Helfers hinzufügen. Insbesondere dann, wenn form_for genannt wird, würde Ich mag einen zusätzlichen h1-Tag erzeugen, wie zum Beispiel:Rails: Richtiger Weg, Funktionalität zu Rails-Methoden hinzuzufügen

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

Im Moment habe ich eine/lib-Datei hinzugefügt, die Activerecord :: Formhelper eröffnet und überschreibt „Formular für ". Unnötig zu sagen, die ganze form_for-Methode mit nur der hinzugefügten Zeile zu schreiben ist hundehässlich ... aber ich kann super() nicht aufrufen, weil, anstatt von der Methode zu erben, die ich super() haben möchte, Ich habe es gerade in/lib überschrieben.

Also, angenommen, ich stur will die Funktionalität über das gleiche form_for-Tag (anstelle von zum Beispiel extended_form_for) aufgerufen werden, was ist der Standard Weg zum Zurückrufen auf die ursprüngliche form_for Methode überschreiben ich? alias_method_chain? Dachte, ich würde fragen, bevor ich in einigen potenziell miesen Praktiken zementieren. Wenn irgendwelche hartgesottenen Veteranen ein Beispiel geben könnten, wäre ich dankbar.

Prost

Antwort

1

alias_method_chain bei weitem der einfachste Weg ist, um die Methode zu überschreiben, während immer noch die ursprüngliche Methode aufrufen zu können. Also in Ihrem lib-Datei sollten Sie etwas wie folgt aus:

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

I @ Antwort ist damit nicht denken, ist mehr Schienen Weg –

5

Sie form_for in Ihrem ApplicationHelper außer Kraft setzen könnte:

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