2011-05-09 15 views
18

tengo este código jQuery:cómo llamar a un método carriles de en jQuery

$("p.exclamation, div#notification_box").live("mouseover", function() { 

    }); 

y quiero llamar a esto carriles método desde dentro del código jQuery como una devolución de llamada:

def render_read 
    self.user_notifications.where(:read => false).each do |n| 
    n.read = true 
    n.save 
    end 
end 

Este método está en mi modelo de usuario. ¿Hay alguna manera de hacer esto?

Respuesta

33

Realiza una llamada AJAX, configura una ruta, responde con una acción de controlador y llama a tu método.

# whatever.js 
$("p.exclamation, div#notification_box").on("mouseover", function() { 
    $.ajax("https://stackoverflow.com/users/render_read") 
}); 

# routes.rb 
resources :users do 
    get :render_read, on: :collection 
    # or you may prefer to call this route on: :member 
end 

# users_controller.rb 
def render_read 
    @current_user.render_read 
    # I made this part up, do whatever necessary to find the needed user here 
end 

PS: Este código es para rieles 3.xy 1.9.x Rubí

+1

fresco, apreciaría el código de ejemplo jQuery ... gracias! – user730569

+1

Ahí va, más simple de lo que pensaba. – edgerunner

1

Usted tendría que instalar un controlador en el lado del servidor para llamar a su método de render_read y entonces se podría utilizar $.ajax o $.post en su jQuery para realizar la solicitud.

3

Es bueno que tengas ese código de modelo. Tendremos que agregar una nueva acción y asegurarnos de que su ruta esté configurada. Si está utilizando recursos, tendrá que agregar colección o miembro. Como está haciendo una actualización, elegiría PUT como el método http.

He aquí un ejemplo de ruta:

resources :user_notifications do 
  collection do 
    put 'render_read' 
  end 
end 

Continúe y añada la acción render_read a su controlador.

Su código de jQuery se verá algo como esto:

$("p.exclamation, div#notification_box").live("mouseover", function() { 
    $.ajax({ 
    url: "/user_notifications/render_read", 
    type: 'PUT' 
    }); 
}); 
1

Normalmente JavaScript funciona en el lado del cliente, pero también es posible que su aplicación dibuja una función JavaScript para cada cliente. En ese caso se puede utilizar el <%= y etiquetas %> en un archivo .erb:

<script type="text/javascript"> 
$(function(){ 
    new AClass.function({ 
     text: <%= Date.today %> 
    }); 
}); 
</script> 
Cuestiones relacionadas