从Rails 3中的application.js访问current_user变量

我希望从我的application.js访问我的current_user变量(我将我的application.js重命名为application.js.erb,以便服务器可以理解我的ruby代码),所以我有类似的东西:

function hello(){ alert(""); } 

但它失败了:

在此处输入图像描述

如何从位于/assets/my_script.js.erb的脚本中获取设备变量,例如来自devise gem的current_user,我认为它不应该是因为theese变量可能无法从公共站点加入,或者应该怎样做这个?

谢谢!

Application.js不会在任何会话变量或方法的上下文中进行评估。 从javascript访问用户名的最简单方法是在应用程序控制器上的before_action中设置cookie:

 class ApplicationController < ActionController::Base before_action :set_user private def set_user cookies[:username] = current_user.name || 'guest' end end 

然后从app / assets中的任何js,您可以访问cookie:

 alert(document.cookie); 

一个更详细但可以说更清晰的方法是创建一个访问当前用户并返回用户名的路由,例如

的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); }); 
  1. 看一下rails casts中的这一集
  2. 尝试使用gon gem

将当前用户从应用程序控制器传递为JSON,以便javascript可用。

应用控制器

 def method_name respond_to do |format| format.json{ render :json => @user.to_json } end end