2017-03-27 1 views
0

für concat am docs Sehen, jemand gibt ein Beispiel dafür, wie es zu benutzen unter:Was der Vorteil der Verwendung von'erfassen` ist und `concat` als nur einen Block direkt in Rails Rendering

def block_to_partial(partial_name, options = {}, &block) 
    options.merge!(:body => capture(&block)) 
    concat(render(:partial => partial_name, :locals => options), block.binding) 
end 

Aber Könntest du das nicht ohne die concat getan haben? Es kann einfach mit der render richtig arbeiten?

+1

Wenn Sie einen Ansichts-Helper schreiben müssen, wenn Ihre Rails-App HAML verwendet, benötigen Sie 'concat', da es ERB in den Eingeweiden gibt. Das war sowieso meine Erfahrung. –

Antwort

1

render Rendert nur eine Vorlage - concat schreibt es in den Ausgabepuffer in der Antwort verwendet.

nimmt diese ERB zum Beispiel:

<% render partial: 'foo/bar' %> 

Da wir <% %> die Ausgabe des Ruby-Code verwenden nur ausgewertet wird. Nichts wird tatsächlich ausgegeben.

<%= render partial: 'foo/bar' %> 

Und

<% concat(render(partial: 'foo/bar')) %> 

Wird sowohl den Inhalt des Teils zu dem Antworttext hinzufügen.

Der wirkliche Vorteil der Verwendung von concat ist, wenn Sie Helper-Methoden erstellen, die direkt in den Puffer schreiben sollten.

capture wird andererseits verwendet, um die Ausgabe eines Blocks (ein Stück HTML) in eine Variable zu speichern, so dass sie woanders in der Ansicht verwendet werden kann.

+0

Beachten Sie, dass das API Dock nicht die offizielle Rails-Dokumentation ist und normalerweise nicht mehr aktuell ist. Ich finde es ziemlich ärgerlich, dass es ein viel besseres Google-Ranking als die offiziellen Dokumente hat. – max

+0

wäre ich nicht in der Lage, den Ertrag anstelle des Captures zu verwenden? – stackjlei

+0

^Sie machen ganz andere Dinge. 'yield' gibt einen Abschnitt des Layouts oder etwas aus, das mit' content_for' erfasst wurde. Der Unterschied hier ist, dass Sie Inhalt als eine Variable mit 'capture' übergeben können, was es wirklich nützlich macht, wenn Sie einen Helfer erstellen, der HTML zum Beispiel transformiert oder erweitert. – max

Verwandte Themen