我的js文件带有嵌入式ruby代码:
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
我该如何解决?谢谢!
答案 0 :(得分:3)
使用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 %>
...
在你的javascript中
var hello = gon.current_user_name;
答案 1 :(得分:2)
<强> JS 强>
要扩展Benjamin Sinclaire
的答案,您必须记住Rails是back-end
系统; JS是front-end
。
这意味着所有Rails变量仅在后端的Rails文件中可用 - 您的浏览器收到的是一组预先渲染的HTML
文件,其中填充了您的数据
您遇到的问题是,如果没有将数据翻译从Rails转换为&#34; JS&#34;,JS就无法读取Rails
数据。所有JS看到的都是DOM
- 页面上的HTML元素
-
数据强>
为了在JS / current_user
中共享诸如front-end
之类的变量,您基本上需要将其传递给HTML层
您可以通过设置隐藏元素(并设置其data attributes)或在layout
如上所述,最有效的方法是使用Benjamin Sinclaire
已经讨论过的gon
gem