繁体   English   中英

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

[英]Accessing current_user variable from application.js in Rails 3

我希望从我的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变量可能无法从公共站点加入,或者应该怎么做这个?

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM