2011-11-20 33 views
5

He intentado incluir un parcial en un modal algo similar a este Rails Admin al hacer clic en "crear idioma".Rails parcial en modal (render parcial desde diferente modelo)

Ahora como realmente no he descubierto cómo funciona el código allí, traté de hacer una mezcla entre este Rails - AJAX a Modal Dialog? y algo propio.

El problema es que el parcial se procesa ahora en el modal. Pero cuando presiono "guardar", la validación volverá a la vista de creación "normal" y no mostrará los errores de validación directamente dentro del modal.

  1. ¿Cómo puedo mostrar los errores de validación directamente en el modo emergente?

  2. al guardar, debería distinguir de alguna manera entre una salva de este modal y una normal de guardar, ya que esto es en parte se llama desde otro lugar y tendría que establecer el nuevo objeto creado directamente como un nuevo objeto dentro de una gota abajo. Supongo que necesitaría distinguir de un formato de respuesta y luego usar JS para establecer el nuevo ID en la ID de DropDown.

Aquí algunos códigos escritos hasta el momento. En la vista donde incluyo el parcial se ve así cuando llamo a otro controlador (ya que estoy en un controlador diferente-nueva-vista).

$.get('<%= url_for :controller => 'customers', :action => 'new' %>', 
      function(data) { 
       $('#customer-modal').html(data); 
      } 
    ); 

Entonces el nuevo en los "customres" diferenciador en controlador entre la diferente formato de petición y hace que la diferente parcial (en este caso "_ajax_form.html.erb"):

if request.xhr? 
    render "_ajax_form", :layout => false 

En este parcial , Uso "simple_form_for @customer,: remote => true do | f] ....", así que supongo que al final el envío debe ser diferente al estándar, ya que esto llama a la "creación" normal en el controlador?

<div class="modal-footer"> 
    <%= f.button :submit, :class => 'btn primary' %> 
    <a id='cancel-form' class= "btn small info">cancel</a> 
    </div> 

Gracias por cualquier ayuda que aclara lo que estoy haciendo mal y cómo se debe hacer ya que mi experiencia en Rails y JS/AXAX aún no son demasiado experimentado ..;)

  • Editado: tengo ahora una versión en la que en mi parcial especial que se carga en el modal, se llame a una acción separada llamada "new_from_sale" dentro del simple_form_for:

simple_form_for @customer, :url => url_for(:action => 'new_from_sale', :controller => 'customers') do |f|

Luego en el controlador, cuando el guardado está bien de este nuevo objeto, me redirige a la primera vista llamada con el nuevo ID como un param que luego llena el menú desplegable. En el caso else, cuando el nuevo objeto no se puede guardar, de alguna manera necesito mostrar los errores aún en ese modal. Hasta ahora tanto trata de hacer que el sea directamente o parcial render :partial => "customers/ajax_form" devolver código JS render :js => "$('#sale_customer_id').val(#{@customer.id});" aún no funcionaría .. pero voy a seguir intentando mi suerte ..

Respuesta

2

Aquí hay un ejemplo básico de cómo lo haría una formulario modal que escribí en respuesta a una pregunta similar (Rails and modal jquery dialog form):

https://github.com/ramblex/modal-form

es necesario agregar :remote => true a la forma que se carga en el cuadro de diálogo.Eso hará que el formato JS se represente desde la acción de creación. A continuación, puede manejar la respuesta en un create.js.erb.

+0

Gracias, no todo lo que hace fue aplicable a nuestra causa, pero dio algunas buenas pistas .. Es decir, usamos el parcial dentro del modal y también por separado para crear objetos nuevos/editar. Allí tendríamos que separarnos, supongo que no utilizar: remote => true, ya que de lo contrario la renderización no funciona. – fisco

Cuestiones relacionadas