Frage

Also ich habe ein Formular in meiner Rails app, die eine benutzerdefinierte Formbuilder verwendet mir einige benutzerdefinierte Feld Tags geben

<% form_for :staff_member, @staff_member, :builder => MyFormBuilder do |f| %>
[...]
    <%= render :partial => "staff_members/forms/personal_details", :locals => {:f => f, :skill_groups => @skill_groups, :staff_member => @staff_member} %>  
[...]
<% end %>

Nun, dies ist teilweise in einem Bereich der Form, die ersetzt durch einen AJAX Callback bekommt. dabei von der Steuerung als Reaktion auf den AJAX-Request Was ich am Ende ist:

render :partial => "staff_members/forms/personal_details", :locals => {:skill_groups => @skill_groups, :staff_member => @staff_member}

Allerdings, wenn ich das tun, dann die Form bricht, als das Objekt Formbuilder ich in der form_for verwendet wird, ist nicht mehr verfügbar. Gibt es eine Möglichkeit für mich, meine Gewohnheit für einen AJAX Rückruf innerhalb eines Teil verwendeten Formbuilder-Objekt zu verwenden?

War es hilfreich?

Lösung

Verwenden fields_for in Ihrem Teil. Es führt eine ähnliche Aufgabe, aber ohne das Formular-Tags Verpackung. Sehen Sie sich die API-Dokumentation .

Andere Tipps

Wie wäre das?

  @template.with_output_buffer do
    @template.form_for @model_object do |f|
      f.fields_for :some_nested_attributes do |ff|
        render :partial => 'nested_attributes', :object => @model_object, :locals => {:form => ff}
      end
    end
  end

Dies wäre besonders nützlich ist, dass Sie die verschachtelte fields_for im Teil verwenden müssen

Sie könnten eine neue Instanz der Formular-Builder im Controller instanziiert, wenn es irgendwie mies ich fühlt:

# in the controller
render :partial => {
  :f => MyFormBuilder.new(:staff_member, @staff_member, template),
  :skill_groups => @skill_groups,
  :staff_member => @staff_member
}

Alternativ können Sie mehr von der Update-Logik bewegen Client-Seite zu sein, die Sie nicht benötigen würden zu befürchten gar Rendering nichts. Sie könnten nur die Werte über JS aktualisieren. Nicht sicher, ob das, obwohl für Ihr Projekt funktioniert.

Vielleicht bin ich ein wenig spät im Spiel hier, und vielleicht verstehe ich die Frage nicht richtig, aber in ApplicationHelper.rb denke ich, kann man einfach die Zeile:

ActionView::Base.default_form_builder = MyFormBuilder

Sie innerhalb Ihrer Ajax-Aufruf den Inhalt f.object_name einreichen können (es funktioniert auch mit partials) und verwenden Sie es Tags in http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html es als erstes Argument übergeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top