¿Pasa el constructor de formularios en remote_function en Rails?

Tengo el cuadro de selección donde, en el cambio, necesito capturar el valor y, a través de la función remota, obtener algunos nombres de campo de db y luego generarlos más abajo en el formulario que aparece en el cuadro seleccionado.

El problema es que los campos están en f.form_for, por lo tanto, están utilizando formbuilder f que tiene el cuadro de selección. Por lo tanto, cuando represento el parcial a través de ajax en el controlador, aparece un error porque no tengo una referencia a la local. creador de formularios f.

¿Alguien sabe cómo o si puedo obtener una referencia al creador de formularios o puede pasarlo en una llamada de función remota y luego pasar a mis locales en el parcial?

Muchas gracias, cualquier ayuda será genial ya que se ha quedado atrapado en esto durante mucho tiempo!

saludos Rick

Tuve el mismo problema y mi solución fue crear otro generador de formularios para el mismo objeto y pasarlo a los parciales.

remote_action.js.erb:

'<%= form_for(@object) do |ff| %>' $('#some_div').html("<%= j render(partial: 'some_partial', locals: {f: ff}) %>" '<% end %>' 

Es importante que la etiqueta form_for tenga comillas simples o de lo contrario habrá problemas con javascript_escape.

Simplemente reescribiría su parcial para no usar el f. formar ayudantes.

Hacer:

 <%= text_field :object_name, :method_name %> 

En lugar de:

 <%= f.text_field :method_name %> 

Estoy haciendo algo similar a lo que sugirió Uri Klar, pero sin pasar los elementos de formulario como cadenas al cliente, ya que no son necesarios:

 # create a form helper 'f' and store it in the variable form_helper. <% form_helper = nil %> <% form_for @object, url: '' do |f| %> <% form_helper = f %> <% end %> # pass form_helper to the form partial $('#element').html('<%= j render "form_element", f: form_helper %>'); 

Observe que form_helper = nil en la primera línea está ahí para establecer el scope de la variable para que esté más allá del bloque del formulario.

Creo que este es un mejor enfoque porque no expone al cliente a ninguno de nuestros trabajos internos, sino que los mantiene únicamente en el lado del servidor.

Este fragmento no encajaba bien en los comentarios a una respuesta diferente … ayuda a ilustrar el caso donde el parcial es para un modelo nested y se hace referencia en un método / acción remotos. También ilustra que mi interpretación literal de @object fue incorrecta:

'<%= form_for([@property.agency,@property]) do |parent_form| %> ' '<%= parent_form.fields_for :address do |f| %>' $('#property_addresses').append("<%= j render(partial: 'common_partials/address', locals: {parent_form: f}) %>") '<% end %>' '<% end %>'

Tenga en cuenta que se trata de una propiedad @, anidada en @ property.agency: donde tenemos una fields_for anidada en form_for.