2015-04-20 29 views
3

我希望从我的application.js中访问我的current_user变量(我将application.js重命名为application.js.erb,以便服务器可以理解我的ruby代码),所以我得到的东西,如:在Rails 3中从application.js中访问current_user变量

function hello(){ alert("<%= current_user.name %>"); } 

但它失败:

enter image description here

我怎样才能获得会话变量像色器件宝石从位于/assets/my_script.js.erb脚本工作CURRENT_USER ,我认为它不应该因为th eese变量可能无法从公共站点获得,或者应该怎么做?

谢谢!

+0

简单的方法就是使用'js.erb'扩展到您的js文件。 – RAJ

+0

@RAJ同意了,但在这一刻的问题是访问current_user变量 –

回答

15

的application.js任何会话变量或方法的情况下不进行评估。从JavaScript访问用户名最简单的方法是设置一个cookie在应用程序控制器before_action:

class ApplicationController < ActionController::Base 
    before_action :set_user 

    private 

    def set_user 
    cookies[:username] = current_user.name || 'guest' 
    end 
end 

然后从任何JS在app /资产可以访问该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); 
}); 
+0

大卫,你可以看看这个问题:http://stackoverflow.com/questions/34323316/fullcalendar-passing-js-vars-to-rails-and-反之亦然?这是一个类似的问题,但我不确定处理这个问题的最佳方法是什么。我想你可以立即告诉我完美的解决方案。谢谢! –

+0

这对dev很有用,但是一旦我推到生产中,它甚至不会识别脚本。对此有何想法? – gwalshington

+0

@gwalshington是您的application.js脚本还是自定义脚本?如果你把它放在其他地方,你需要检查你是否正确地预编译你的资产 - 关于这个主题有很多关于SO的问题 –

2
  1. 看看this episode在轨蒙上
  2. 尝试使用gon gem
+1

我看到,我可以让我的js.erb了解ruby代码,例如警报(“<%= 'hi' %>”);工作,但我不能让它与current_user变量 –

1

通行证当前用户以查看JSON从应用控制器,以便它可用于JavaScript的。

应用控制器:在js文件使用Ruby

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

这会让所有用户的信息暴露给用户,这可能是你不想做的。 –

相关问题