javascript - tag - rails load js on specific page
Accediendo a la variable current_user desde application.js en Rails 3 (3)
Deseo acceder a mi variable current_user desde mi application.js (cambié el nombre de mi application.js a application.js.erb para que el servidor pudiera entender mi código Ruby), así que obtuve algo como:
function hello(){ alert("<%= current_user.name %>"); }
Pero falla:
¿Cómo puedo obtener variables de sesión como el usuario_actual de la gema de diseño trabajando desde una secuencia de comandos ubicada en /assets/my_script.js.erb, creo que no debería ser posible porque estas variables podrían no ser accesibles desde sitios públicos, o qué debería hacerse acerca de ¿esta?
¡Gracias!
- Echa un vistazo a este episodio de moldes de rieles
- Intenta usar la gema gon
Application.js no se evalúa en el contexto de ninguna variable o método de sesión. La forma más sencilla de acceder al nombre de usuario desde javascript sería establecer una cookie en una acción anterior en el controlador de la aplicación:
class ApplicationController < ActionController::Base
before_action :set_user
private
def set_user
cookies[:username] = current_user.name || ''guest''
end
end
Luego, desde cualquier js en aplicación / activo, puede acceder a la cookie:
alert(document.cookie);
Un método más detallado pero posiblemente más limpio sería crear una ruta que acceda al usuario actual y devuelva el nombre de usuario, por ejemplo
routes.rb
get ''current_user'' => "users#current_user"
users_controller.rb
def current_user
render json: {name: current_user.name}
end
application.js
$.get(''/current_user'', function(result){
alert(result.name);
});
Pase el usuario actual para verlo como JSON desde el controlador de la aplicación para que esté disponible para javascript.
controlador de aplicación :
def method_name
respond_to do |format|
format.json{ render :json => @user.to_json }
end
end