rails form_with form for example ruby-on-rails ajax partial formbuilder

ruby on rails - form_with - Rails AJAX: Mi parcial necesita una instancia de FormBuilder



select in ruby on rails (5)

Así que tengo un formulario en mi aplicación de Rails que usa un FormBuilder personalizado para darme algunas etiquetas de campo personalizadas

<% 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, este parcial está en un área de la forma que se reemplaza por una devolución de llamada AJAX. Lo que termino haciendo desde el controlador en respuesta a la solicitud de AJAX es:

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

Sin embargo, si hago eso, el formulario se rompe, ya que el objeto FormBuilder que utilicé en form_for ya no está disponible. ¿Hay alguna forma de que use mi objeto FormBuilder personalizado dentro de un parcial utilizado para una devolución de llamada AJAX?


Puede instanciar una instancia nueva de su creador de formularios en el controlador, aunque me parece un poco asqueroso:

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

Alternativamente, podría mover más de la lógica de actualización al lado del cliente, lo que no requeriría que se preocupe por representar nada en absoluto. Podrías actualizar los valores a través de JS. Sin embargo, no estoy seguro si eso funciona para su proyecto.


Use fields_for dentro de su parcial. Realiza una tarea similar pero sin envolver las etiquetas de formulario. Ver los documentos API .


¿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 si necesita usar los campos anidados_para en el parcial


Quizás estoy un poco retrasado en el juego aquí, y tal vez no entiendo la pregunta correctamente, pero en ApplicationHelper.rb creo que puedes agregar la línea:

ActionView::Base.default_form_builder = MyFormBuilder