tag specific rails page javascript ruby-on-rails ruby ruby-on-rails-3 devise

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!



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