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

标签 javascript ruby-on-rails ruby ruby-on-rails-3 devise

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

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

但失败了:

enter image description here

我如何从位于/assets/my_script.js.erb 中的脚本中获取像 current_user 这样的 session 变量,我认为它不应该被启用,因为这些变量可能无法从公共(public)站点访问,或者什么应该怎么做?

谢谢!

最佳答案

Application.js 不会在任何 session 变量或方法的上下文中进行评估。从 javascript 访问用户名的最简单方法是在应用程序 Controller 的 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);

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

路线.rb

get 'current_user' => "users#current_user"

用户 Controller .rb

def current_user
    render json: {name: current_user.name}
end

应用程序.js

$.get('/current_user', function(result){
  alert(result.name);
});

关于javascript - 从 Rails 3 中的 application.js 访问 current_user 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737384/

相关文章:

javascript - Rails 将重复的 js.erb 代码包装到函数中

ruby-on-rails - AWS RDS 扩展安装

javascript - 从 Rails View 调用 JS 函数

ruby - 在特立独行者上使用 RVM 安装任何版本的 ruby

ruby-on-rails - spork 可以处理 rake 任务吗?

ruby-on-rails - Rails 请求规范 - 未定义方法 `body' for nil :NilClass (rswag)

javascript - 在一个页面中可以同时设置多少个 javascript setTimeout/setInterval 调用?

javascript - 让 JS 检测页面上的位置?

javascript - 实现鼠标平滑的最有效方法

javascript - 除了 (':not( selector )' 之外,jQuery 的替代方案是什么?