2009-09-04 26 views
17

Ich vermisse hier etwas offensichtlich, aber hier ist, was ich versuche zu tun.Schienen Helfer in Helfer-Datei

Aus Sicht, ich bin eine benutzerdefinierte Hilfefunktion aufrufen

<div> 
    <%=display_services%> 
</div> 

In der Hilfsdatei mit der display_services

funktionieren
def display_services 
    html = "<div>" 
    form_for @user do |f| 
    f.text_field ... 
    end 
html << "</div>" 
end 

ich, dass form_for Verfahren und f.text_field Ausgang direkt zu finden HTML-Stream ohne den div-Wrapper, den ich mag. Was ist die richtige Syntax, um den gesamten HTML-Code in display_services auszugeben? Vielen Dank im Voraus für Ihre Hilfe.

Antwort

22

Nur ein Vorschlag für Stil, wie ich etwas wie folgt aus:

Ihrer Ansicht:

<% display_services %> 

Bitte beachten Sie, dass die = nicht mehr benötigt wird. Der Helfer verwendet dann concat() etwas zu Ihrer Seite anhängen und das Putting-long-Strings zusammen Sache ist zu veraltet:

def display_services 
    concat("<div>") 
    form_for @user do |f| 
    f.text_field ... 
    end 
    concat("</div>") 
end 

Ist es nessaccary die <div>-Tag in den Helfer zu setzen. Wenn Sie einen Helfer brauchen etwas in einen Block für die Einbettung könnten Sie einigen ertrag Magie auch:

def block_helper 
    concat("<div>") 
    yield 
    concat("</div>") 
end 

Und es wie folgt aus Ihrer Sicht nutzen - natürlich mit Helfern zu:

<% block_helper do %> 
    cool block<br/> 
    <% display_services %> 
<% end %> 
+0

Süße, ich mag Ihre Lösung besser, es ist sauberer, danke. – Bob

+2

Eine andere Anmerkung, wenn Sie wollen, dass Ihr HTML hübsch aussieht, und "\ n" bis zum Ende von concat. – Bob

5

Wie sich herausstellte, hatte ich so etwas wie dieses

def display_services 
    html = "<div>" 
    html << (form_for @user do |f| 
    f.text_field ... 
    end) 
    html << "</div>" 
end 

Beachten Sie die() umschlungen Form Block zu tun. Wenn jemand eine bessere Lösung hat, lass es mich wissen.

30

IMHO, sollte nicht HTML in Ruby-Code fest codiert haben. Stattdessen bevorzugen Sie partials views.

module ServicesHelper 
    def display_services(user) 
    render :partial => "shared/display_services", :locals => {:user => user} 
    end 
end 
+0

Ich stimme diesem Ansatz zu - scheint sauberer zu sein, so wenig HTML in Ihrem Helfer wie möglich zu bauen. – cman77

+0

Obwohl ich diese Antwort gewählt habe, stimme ich Ihnen von ganzem Herzen zu, dass die kleinste HTML-Menge in Ihrem Helfer generiert werden sollte (ich würde sagen "KEIN HTML sollte jemals in einem Helfer generiert werden!"), Frage ich mich über den Vorteil dieser zusätzlichen Ebene der Indirektion für nur eine Zeile Code. Sicherlich erhöht es die Zeit, die es braucht, um die Codebasis zu einem späteren Zeitpunkt oder von einem anderen Entwickler zu verstehen und zu navigieren. (Obwohl natürlich kann ich sehen, dass es Tastenanschläge kurzfristig speichern würde, wenn es viel verwendet wurde.) –

Verwandte Themen