2012-03-02 10 views
9

Tengo lo que creo que es un problema muy simple. Vengo de un fondo de PhP, y solía hacer esto todo el tiempo, por lo que podría estar viendo esto de la manera incorrecta.Ruby on Rails: Acción sin Ver

Estoy tratando de crear un controlador de ajax en RoR. Cuando el usuario hace clic en un botón, javascript lanza un POST y le da a los comentarios del usuario el uso del parámetro "éxito:" de la función ajax de jQuery.

El problema es que RoR está intentando cargar una vista para el controlador ajax, cuando realmente solo necesito algunas líneas en el controlador para hacer el trabajo de la base de datos, y echo un código de estado que será interpretado por el usuario javascript

Esto es solo una página de suscripción de suscripción de mailchimp, así que solo estoy usando el controlador 'home'.

Mis rutas;

map.root :controller => 'home' 
map.connect '/mcsubscribe', :controller => 'home', :action => 'mcsubscribe' 

My Home Controller;

class HomeController < ApplicationController 
    def index 
    # no content 
    end 
    def mcsubscribe 
    print params[:email] 
    end 
end 

Y mi prueba de javascript, para que pueda entender lo que está pasando;

function mcSubscribe() { 
    var email = jQuery("#signup_input_email").val(); 
    jQuery.ajax({ 
     type: "POST", 
     url: "http://domain.com/mcsubscribe", 
     data: "email=" + email, 
     cache: false, 
     success: function(result) { 
      alert(result); 
     } 
    }); 
} 

pensé que esto sería un problema común, pero Googled alrededor y sólo pudo encontrar sugerencias para redirigir, ya que el usuario nunca visitar la página/mcsubscribe, que no parece apropiado.

Respuesta

11

Usando

print params[:email] 

se acaba de imprimir ese valor a la aplicación registra, no en la respuesta.

desea que esta:

render :text => params[:email] 
12

Tenga una mirada en http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

Es posible que tenga render :nothing => true

EDIT: leído mal su pregunta, render :text => "yourtext" debe adaptarse a sus necesidades

+0

Rendering nada no es exactamente lo que el PO quiere lograr. Quiere imprimir solo el valor de 'params [: email]'. – Koraktor

+0

Desde su enlace, ** render: text => params [: email] ** funciona perfectamente gracias! Sabía que tenía que ser simple. – lynks

0

necesitas hacer algo como esto:

def mcsubscribe 
    # Do something to unsubscribe 
    respond_to do |format| 
    format.html { redirect_to(success_page) } 
    format.js { render :text => params[:email] } 
    end 
end 

Si se utiliza Ajax, el params[:email] es enviar como texto. Si se requiere un formato HTML (es decir, el usuario hizo clic en un enlace o rellenó un formulario regular), se emite una redirección para decirle al usuario que la suscripción se ha realizado correctamente.

+0

Haré toda la retroalimentación de los usuarios en el lado del cliente, desvaneciendo el formulario si recibo un 'sí' de regreso del controlador y desvaneciendo el mensaje. – lynks

+0

Solo se muestra para sake de plenitud :) Y una ventaja es que también está funcionando para los usuarios sin JavaScript (habilitado), si queda algo ... – Veger

0

En los carriles 5 es necesario utilizar 'normal':

render plain: params[:email]