如何从rails中的application.js访问yml文件?

时间:2013-12-30 06:42:02

标签: javascript ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 yaml

我有一个yml文件,我需要在脚本中的application.js文件中使用这些键。我无法从脚本中访问它。请帮我。我在初始化程序中有以下几行

APP_CONFIG = YAML.load_file("#{Rails.root}/config/filename.yml")[Rails.env]

我的yml文件中有以下键

development:
  key1: 782364764527225794828437
  key2: sdjfbjs7e834284383984729
  key3: 73465365egfrf36462874727

我以

的身份访问application.js文件中的键
APP_CONFIG['key1']

但似乎什么也没带。但是当我在视图体中打印相同的东西时

<%= APP_CONFIG['key1'] %>

然后它返回key1的值。

我该怎么做才能访问application.js文件中的值。它也不适用于视图本身的脚本体。

3 个答案:

答案 0 :(得分:4)

您无法在Javascript文件中执行ruby命令

您需要找出一些其他方法来加载application.js

中的值

像在app/views/layouts/application.html.erb中将它们初始化为全局变量

<script>
  var key = '<%= APP_CONFIG['key1'] %>';
</script>

并在任何Javscript文件中使用它

 window.onload=function(){ alert(key);};

答案 1 :(得分:1)

您无法直接从JS文件访问您的yml文件内容。你能做的是 在您的视图页面上将这些键分配给js变量,然后您可以使用它来进行JS工作

<script>
  var appConfigKeys = “<%= j APP_CONFIG.to_json.html_safe %>”;
  console.log(appConfigKeys);
</script>

如果您希望它在其他JS文件中可用,那么您需要获取全局变量的帮助。

<script>
  appConfigKeys = “<%= j APP_CONFIG.to_json.html_safe %>”;
  console.log(appConfigKeys);
</script>

以上解决方案将为您提供所有密钥作为javascript哈希 如果只需要第一个键,则可以将单个键分配给JS变量。

<script>
  appConfigKey = “<%= APP_CONFIG['key1'] %>”;
  console.log(appConfigKey);
</script>

答案 2 :(得分:0)

我来到这个问题是因为我需要从 JS 访问我的 Rails 语言环境 YAML,更具体地说是存储在那里的月数组。我的解决方案是使用 ERB 所需的值创建一些 HTML 并在父 div 上设置 display: none(此处使用引导程序的 d-none 类完成)。

在语言环境 YAML 中:

en:
  date:
    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]

在视图中:

<ul class="d-none" id="months">
  <%= I18n.t('date.month_names').each do |month_name| %>
    <% if month_name.present? %>
      <li><%= month_name %></li>
    <% end %>
  <% end %>
</ul>

在JS文件中:

const months = document.getElementById('months');