如何在Rails应用和客户端之间共享数据(始终可用)

时间:2015-10-07 01:10:30

标签: ruby-on-rails json initialization asset-pipeline

我希望能够定义一个返回哈希数据的ruby方法,但我也希望它在应用程序初始化时成为application.js文件的一部分。

实际数据:这里定义了一切(在lib或配置中,我猜?)

def shared_data
  { foo: bar }
end
in app (我如何访问应用中的shared_data?)

def some_method 
  shared_data # => { :foo => 'bar' }
end

在应用初始化时生成js文件(我如何生成并包含在application.js中)

var shared_data = { "foo": "bar" };

我的问题:

  1. 我应该在哪里放置shared_data方法?
  2. 如何生成并包含此JavaScript?

1 个答案:

答案 0 :(得分:2)

如果在应用初始化后此数据未发生变化

您可以将其放在config/initializer/shared_data.rb中并将其分配给Constant或$ global变量,这样这些数据将在整个应用范围内可用

$shared_data = { x:1, y:2 }

然后创建一个javascript文件assets/javascripts/main.js.erb (请注意.erb ext),将其包含在application.js中,您就可以访问此数据

var sharedData = <%= $shared_data %>

注意:的 这些数据将被编译并在生产中使用assets:precompile变为静态