我希望从我的application.js访问我的current_user变量(我将我的application.js重命名为application.js.erb,以便服务器可以理解我的ruby代码),所以我有类似的东西:
function hello(){ alert("<%= current_user.name %>"); }
但它失败了:
如何从位于/assets/my_script.js.erb的脚本中获取设备变量,例如来自devise gem的current_user,我认为它不应该是因为theese变量可能无法从公共站点加入,或者是什么应该怎么做?
谢谢!
答案 0 :(得分:15)
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 :(得分:3)
答案 2 :(得分:1)
将当前用户从应用程序控制器传递为JSON,以便javascript可用。
应用程序控制器:
def method_name
respond_to do |format|
format.json{ render :json => @user.to_json }
end
end