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

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 中的脚本 gem 中获取 current_user 之类的会话变量,我认为它不应该被启用因为这些变量可能无法从 public 站点访问,或者应该怎么办?

谢谢!

  1. 看看 this episode 中的 rails 演员
  2. 尝试使用 gon gem

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);

一种更冗长但可以说更简洁的方法是创建一个访问当前用户和 returns 用户名的路由,例如

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);
});

从应用程序控制器传递当前用户以查看为 JSON,以便它可供 javascript 使用。

应用程序控制器:

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