Js:未定义的局部变量或方法current_user'
js: undefined local variable or method `current_user'
我有嵌入ruby代码的js文件:
function MyController($scope) {
$scope.sayHello = function() {
var hello = <%= current_user.name %>;
$scope.greeting = hello;
};
}
但是我发现了一个指向
的错误undefined local variable or method current_user
= javascript_include_tag "application", "data-turbolinks-track" => true
我该如何修复它?谢谢!
使用gon gem https://github.com/gazay/gon最简单的方式将数据从rails环境传递到javascript环境(换句话说:从服务器到客户端)。
在你的控制器
# Make sure first that current_user is not nil
gon.current_user_name = current_user.name
# As you can see we don't pass the whole `current_user` but only the data we need
# gon and javascript won't know how to use your Rails objects
# so pass only strings, integers, arrays and hashs
# (but you'll figure out all of this by your self, it's pretty natural)
布局(更多关于gon安装的信息可以在gon github页面中找到)
<head>
<%= include_gon %>
...
var hello = gon.current_user_name;
JS
扩展Benjamin Sinclaire
的答案,你必须记住Rails是一个back-end
系统;JS是front-end
.
这意味着所有的Rails变量只在后端Rails文件中可用——浏览器接收到的是一组预渲染的HTML
文件,其中填充了您的数据
你的问题是,JS不能读取Rails
数据没有数据翻译从Rails到"JS"。所有JS看到的是DOM
——页面上的HTML元素
,
为了在JS/front-end
中共享current_user
等变量,您基本上需要将其传递到HTML层
您可以通过设置隐藏元素(并设置其数据属性)或在layout
gon
gem, Benjamin Sinclaire
已经讨论过了
相关文章:
- 解析-为什么user.getSessionToken()返回未定义的结果
- 我将如何将Base的原型分配给User
- PassportJS/忘记密码:req.user只定义一次
- User getSessionToken() Returning Undefined
- AngularJs-$route.current到底包含什么
- 在 Meteor.loginWithPassword 之后,旧用户不会离线(meteor-user-status 包)
- 为什么Parse.User.current()为null
- 在/user/后面显示用户名的用户信息
- Javascript current url
- AngularJS和Spring后端-在AngularJS中以user.password的形式从数据库中获取密码
- req.user在使用express服务器passport.js进行twitter身份验证后未定义
- 希望passport存储req.client,而不是用于承载策略的req.user
- document.getElementById(“#”).innerHTML=“”;你好"+user+&quo
- 无法使用快递和猫鼬进行路由,请继续获取"类型错误:req.params.user不是函数;
- 正则表达式 path.match(/user/);.
- 在Safari浏览器上,User.Identity.Name为空
- 如何减少'current'setTimeOut中的时间
- WordPress Ajax Call -- WordPress User ID
- 在云代码和Parse.com上的current.user中管理会话
- 使用 User Current Time JavaScript 更改 CSS