Entonces obtuve un formulario con remote: true y funciona como excepción cuando estoy en la página del formulario.
Pero se supone que esta forma está en un modal. Cuando pruebo el formulario en el modal que no funciona.
Tengo 2 casos:
form_for(@report, remote: true, method: 'post')Eso arroja un error porque está buscando una plantilla html:
ReportsController#create is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []Y
form_for(@report, format: "js", remote: true, method: 'post')Simplemente siga el enlace a la vista js.
Estoy bastante seguro de que este error se debe al hecho de que cargo este formulario de forma asíncrona con:
$.ajax({ url: "/form/url" })Pero no puedo averiguar qué hacer.
Como información complementaria, uso Vex lib para la visualización modal.
Enfrenté el mismo problema y sigo tratando de averiguar exactamente por qué remote: true no funcionará dentro de un modal, pero pude obtener el mismo comportamiento omitiendo remote: true y agregando la llamada ajax manualmente.
Entonces, también puedes evitar esto; verifique este código (reducido) que usé en mi _form.html.erb parcial que se representa dentro del modal 1 :
<div> <%= form_tag company_users_url, id: "company-users-form" do |f| %> Select file: <%= file_field_tag :file %> <%= submit_tag "Send" %> <% end %> <div> <script> $("#company-users-form").submit(function(event){ event.preventDefault(); var formData = new FormData($(this)[0]); $.ajax({ url: '<%= company_users_url %>', type: 'POST', data: formData, async: false, cache: false, contentType: false, enctype: 'multipart/form-data', processData: false }); return false; }); </script> Con esta configuración, primero uso un remote: true en un form que abre un modal que representa lo anterior parcial. Luego, dentro de ese parcial si envío el formulario, ahora la llamada se envía nuevamente como js , por lo que mi vista js.erb se representa correctamente; en mi caso solo una línea con el nuevo contenido modal:
$('#company-users-modal').html("<%= j(@new_content) %>"); 1 Observe el uso de formData por simplicidad.