如何将ruby字符串传递给rails中的application.js文件

时间:2011-09-05 03:48:23

标签: jquery ruby-on-rails ruby-on-rails-3

我有一些Javascript,我需要分配一个ruby字符串。在这种情况下,我编写了一些需要登录用户电子邮件地址的javascript函数。我正在使用haml。

在我的应用程序布局文件(application.html.haml)中,我可以这样做,它可以工作:

%script{:type => "text/javascript", :charset => "utf-8"}
  $(document).ready(function () {
  alert('hello'+ "#{User.find(current_user).email}");
  });

但是我的应用程序有一个专用的js文件。 application.js档案

如何从我的视图中将登录用户的电子邮件地址传递给application.js文件?

application.js中的以下内容不起作用。

$(document).ready(function () {
  alert('hello' + "#{User.find(current_user).email}");
});

3 个答案:

答案 0 :(得分:1)

您可以在全局JavaScript变量中设置用户信息:

%script{:type => "text/javascript", :charset => "utf-8"}
  var user = { email: "#{escape_javascript User.find(current_user).email}" }
  $(document).ready(function () {
    alert('hello ' + user.email);
  });

然后在application.js中关闭:

$(document).ready(function() {
  alert('hello ' + user.email);
});

你的页面应该两次说“你好”。

此外,current_user通常不会是用户实例吗?如果是,则current_user.email应该足够,如果没有,则设置然后您需要在控制器中设置@user = ...,然后在视图中使用@user.email

我希望我的HAML正确,我不使用它所以我有点猜测语法。

答案 1 :(得分:1)

我假设application.js代码在一个函数内(即你需要引用当前用户的电子邮件地址)。如果是这样,那么为什么不“读取”用户看不到的容器标签中的数据/值?您的视图(即ERB / HAML / etc - 只是不是js)可以使用从模型中评估的适当值来编写此容器标记。

答案 2 :(得分:0)

您可以使用gon gem将变量从控制器传递到javascript。

相应地安装gem并进行设置,然后在控制器中调用gon.current_user_email = current_user.email

然后在gon.variable_name

等javascript中访问该字符串