2017-06-13 4 views
1

Ich baue eine App, wo es vorteilhaft wäre, Formularfelder (wie email_field s) mit Partials anstelle der vorhandenen Builder-Methoden zu rendern. Als Beispiel wäre es hilfreich, etwas zu haben, wie:Render-Formular mit Teiltönen anstelle von Helfern?

<%= rendered_form_for @article do |f| %> 
    <%= f.text_field :title %> # renders /forms/text_field 
    <%= f.email_field :author %> # renders /forms/email_field 
    <%= f.submit "Create" %> # renders /forms/submit 
<% end %> 

Ich habe versucht, per the docs ein Formular-Builder erstellen:

# Used with rendered_form_for (a helper that injects this builder) 
class RenderedFormBuilder < ActionView::Helpers::FormBuilder 
    def email_field(attribute, options={}) 
    options.merge! attr: attribute 
    render partial: '/forms/email_field', **options 
    end 
end 

Leider ist die render Methode existiert nicht in diesem Zusammenhang , deshalb wirft dies einen Fehler auf.

Gibt es Hinweise oder Vorschläge zum Rendern eines Formulars mit Hilfe von Teiltafeln anstelle von Helfern? Vielen Dank im Voraus.

+0

Versuchen Sie 'ActionController :: Base.helpers.render ...' – Iceman

+0

@Iceman Ein guter Ausgangspunkt, und ich werde weiter graben, aber das scheint nicht den Kontext aus dem Rest der App zu erhalten . Zum Beispiel hat es keine Verzeichnisse, in denen man suchen kann. "ActionView :: Template :: Error (Fehlende Teilformulare/_email_field mit {: snip)}. Gesucht in :):' –

Antwort

1

Es gibt ein Attribut namens @template, das die render Methode anbieten würde. Der Code könnte Refactoring werden:

# Used with rendered_form_for (a helper that injects this builder) 
class RenderedFormBuilder < ActionView::Helpers::FormBuilder 
    def email_field(attribute, options={}) 
    options.merge! attr: attribute 
    @template.render partial: '/forms/email_field', locals: options 
    end 
end 

Auch im locals Hash bearbeitet für die Definition lokale Werte innerhalb des Teils gemacht.

Verwandte Themen