2010-09-15 15 views
5

Tengo un formulario de correo electrónico. Pero estoy haciendo un formulario de prueba de correo electrónico donde un usuario puede agregar un correo electrónico único, y hacer que la prueba de correo electrónico lo envíe a ese correo electrónico en particular.¿Cómo pasa AJAX vars de jQuery a su controlador?

Para hacerlo más fácil, decidí hacer que el correo electrónico de prueba funcionara a través de ajax, y pegar todo dentro del otro formulario de correo electrónico.

no puedo encontrar la manera de enviar las variables de mi HAML a mi controlador de

new.html.haml

- form_tag admin_email_blast_path do 
    Subject 
    %br 
    = text_field_tag 'subject', :class => "mass_email_subject" 
    %br 
    Body 
    %br 
    = text_area_tag 'message', '', :name => 'editor1', :class => "mass_email_body" 
    %br/ 
    = submit_tag 'Send Email', :class => 'button' 

    .grid_3.right.align_right.suffix_1 # <= TEST EMAIL :D 
    = text_field_tag 'email', nil, :style => "width: 150px;", :class => "test_email_address" 
    = link_to 'Test Email', test_email_admin_email_blast_path, :class => 'button test_email' 

JS

$(".test_email").live("click", function() { 

    var email = $(".test_email_address") 
    var subject = $(".mass_email_subject"); 
    var body = $(".mass_email_body"); 

    data = "email=" + email.val() + "&subject" + subject.val() + "&body" + body.val(); 

    $.ajax({type: "GET", 
      url: $(this).attr("href"), 
      dataType: "script" 
      data: data 
      }); 
    return false; 
}); 

Controlador

def test_email 
    debugger 
    email = params[:email] 
    subject = params[:subject] 
    body = params[:body] 
    Notifier.deliver_email_blast(email, subject, body) 
end 

routes.rb

admin.resource :email_blast, :member => { 
           :test_email => :get 
           } 

me disculpo de antemano si esto es una pregunta tonta novato. :(

+1

¿test_email_admin_email_blast_path acepta solicitudes GET? (Prueba "rake routes | grep test_email_admin_email_blast" para ver cómo Rails interpreta tus routes.rb) – tobym

+0

Sí. test_email_admin_email_blast GET /admin/email_blast/test_email(.:format) {: controller => "admin/email_blasts",: action => "test_email"} – Trip

Respuesta

7

se puede utilizar el parámetro data:

$('.test_email').live('click', function() { 

    var subject = $('.mass_email_subject'); 
    var body = $('.mass_email_body'); 

    $.ajax({ 
     type: 'GET', 
     url: this.href, 
     dataType: 'script', 
     data: { subject: subject.val(), body: body.val() } 
    }); 
    return false; 
}); 
+0

Sí, pero ¿cómo se conecta eso con mi controlador de rieles? ¿Cómo configuro los vars para mi notificador? – Trip

+1

Todo lo que hace es enviar una solicitud AJAX a '/ testemail /? Subject = foo & body = bar' y ejecuta el javascript devuelto desde esta acción del controlador. –

+0

Derecha. Agarré esa parte. Pero no responde mi pregunta de cómo estas variables pueden ser leídas por el controlador de rieles. Agradezco la ayuda, no obstante. – Trip

3

Suponiendo que está recibiendo el someterse a trabajar correctamente basado en Darin Dimitrov respuesta, entonces es necesario utilizar el objeto params En este caso parece que todo. que hay que hacer es params de acceso [: asunto] y params [: cuerpo]. en su acción de controlador

EDIT:.

en respuesta al comentario, GET y POST hacen ninguna diferencia a params Si el formulario no está funcionando, prueba que la modificación de JS utilizar serialize y devuelve un error en caso de fallo:

$(".test_email").live("click", function() { 

    var subject = $(".mass_email_subject") 
    var body = $(".mass_email_body") 

    $.ajax({type: "GET", 
      url: $(this).attr("href"), 
      dataType: "script" 
      data: $('#form_id').serialize(), 
      error: function(){ alert("There was a problem, please try again.") } 
      }); 
    return false; 
}); 

Si aún no está funcionando, entonces es mejor vistazo para ver si su acción del controlador está siendo golpeado en absoluto.

+0

El siguiente formulario no funciona. Los vars no pasan a params [: subject], ni a ninguno de los demás. ¿Eso es porque es un "GET" y no un "POST"? Intenté ambos, asegurándome también de que mi miembro de la ruta fuera una: solicitud de publicación. Cuando la solicitud routes.rb y la solicitud de ajax es POST, obtengo un 'Solo se permiten solicitudes de publicación'. cuando ambos son GET, obtengo un param nulo. – Trip

+0

El controlador está siendo golpeado. Puse un depurador justo antes cuando defino los params. Pero una vez que llego allí, todos están definidos como 'nil'. Extraño ¿verdad? Probé tu método serialize() y puse un ID único alrededor de mi formulario, y no da. – Trip

+1

¿Dónde está exactamente su depurador ... después de 'def test_email'? – tobym

Cuestiones relacionadas