Pregunta

Así que tengo una forma de mi aplicación Rails que utiliza un FormBuilder a medida que me diera algunas etiquetas de campos personalizados

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

Ahora, esto es parcial en un área de la forma que se sustituye por una devolución de llamada AJAX. Lo que termino haciendo desde el controlador en respuesta a la petición AJAX es:

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

Sin embargo, si hago lo que entonces la forma se rompe, como el objeto FormBuilder que utilicé en la form_for ya no está disponible. ¿Hay alguna forma para que yo use mi costumbre FormBuilder objeto dentro de un usado parcial de una devolución de llamada AJAX?

¿Fue útil?

Solución

Utilice fields_for dentro de su parcial. Se lleva a cabo una tarea similar pero sin envolver las etiquetas de formulario. Ver la API docs .

Otros consejos

¿qué tal esto?

  @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

Esto sería especialmente útil es que necesita utilizar el fields_for anidado en el parcial

Se puede crear una instancia de una nueva instancia de su constructor de la forma en el controlador, aunque se siente tipo de pésimo a mí:

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

Como alternativa, puede mover más de la lógica de actualización para ser parte del cliente que no requeriría que preocuparse por la prestación de nada en absoluto. Se podía actualizar los valores a través de JS. No estoy seguro si eso funciona para su proyecto sin embargo.

Tal vez soy un poco tarde en el juego aquí, y tal vez yo no entiendo la pregunta correctamente, pero en ApplicationHelper.rb Creo que se puede simplemente añadir la línea:

ActionView::Base.default_form_builder = MyFormBuilder

Puede presentar, dentro de su ajax llamar el contenido de f.object_name (también esta trabaja con parciales) y lo utilizan para hacer que las etiquetas definidas en http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html pasándolo como primer argumento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top