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

How can I share data between Rails app and client (always available)

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

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

def shared_data
  { foo: bar }
end

在应用程序中(我如何在应用程序中访问 shared_data?)

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

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

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

我的问题:

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

如果此数据在应用程序初始化后没有改变

您可以将其放入 config/initializer/shared_data.rb 并将其分配给常量或 $global 变量,这样该数据将在应用程序范围内可用

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

然后创建一个 javascript 文件 assets/javascripts/main.js.erb(注意 .erb 扩展名),将其包含在 application.js 中,您将能够访问此数据

var sharedData = <%= $shared_data %>

注意事项: 此数据将被编译并变为静态 assets:precompile in prodution