Domanda

Così ho una forma nella mia applicazione Rails che usa un FormBuilder personalizzato per darmi alcuni tag campi personalizzati

<% 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 %>

Ora, questa parziale è in una zona della forma che si sostituisce con un callback AJAX. Quello che finisce per fare dal controller in risposta alla richiesta AJAX è:

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

Tuttavia, se lo faccio poi le pause di forma, come l'oggetto FormBuilder ho usato in form_for non è più disponibile. C'è un modo per me di utilizzare mia abitudine FormBuilder oggetto all'interno di un usato parziale per un callback AJAX?

È stato utile?

Soluzione

Utilizzare fields_for all'interno del vostro parziale. Esso svolge un compito simile, ma senza avvolgendo i tag form. Vedere l'API docs .

Altri suggerimenti

come su questo?

  @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

questo sarebbe particolarmente utile è necessario utilizzare il fields_for nidificato nel parziale

Si potrebbe istanziare una nuova istanza del costruttore modulo nel controllore, se ci si sente sorta di schifo a me:

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

In alternativa, è possibile muoversi più della logica di aggiornamento per essere lato client che non si richiederebbe preoccuparsi di rendere nulla. Si potrebbe semplicemente aggiornare i valori tramite JS. Non sono sicuro se funziona per il vostro progetto però.

Forse sono un po 'in ritardo nel gioco qui, e forse io non capisco la domanda correttamente, ma in ApplicationHelper.rb penso che si può semplicemente aggiungere la riga:

ActionView::Base.default_form_builder = MyFormBuilder

È possibile inviare all'interno del vostro ajax chiamare il contenuto del f.object_name (è funziona anche con parziali) e usarlo per rendere i tag definiti nel http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html passarlo come primo argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top