4

我如何在 Rails 3.2 中的 application.js.erb 中需要不同的文件?我尝试了以下但没有奏效

<% if Rails.env == production %>
  //= require production_config.js
<% else %>
  //= require other_config.js
<% end %>
//= require jquery
//= require jquery_ujs
4

3 回答 3

4

您的示例将不起作用,因为assets:precompile在 erb 转换为干净的 js 之前。而且您的资产语法错误。是什么//= require 'production_config.rb'?可能是'production_config.js'。但是你不应该在资产注释中写引号和文件扩展名。

您可以编写文件config.js.erb并在其中写入如下内容:

<% if Rails.env == production %>
  productionConfig();
<% else %>
  otherConfig();
<% end %>

在你的application.js文件中简单地写

//= require config
//= require jquery
//= require jquery_ujs
于 2012-05-19T23:11:46.183 回答
2

您可以这样做,但您需要在 application.html.erb 中包含代码(在我建议的 head 操作中)。

如果您将production_config.js文件添加到“asset/javascript”文件夹,则可以使用以下方法添加它:

<% if Rails.env == production %>
   <%= javascript_include_tag "production_config" %>
<% else %>
  <%= javascript_include_tag "other_config" %>
<% end %>

确保您将其称为 production_config.js.coffee (这些会自动捆绑)并且也不要将其添加到您的 application.js 中。

于 2012-05-19T23:18:11.920 回答
0

Sprocket 需要//= require从文件开头设置语句,因此它们不起作用。

在这种情况下,您可以使用 ruby​​ 方法: sprokets github

此外,最好在单独的文件中执行此操作。像这样的东西:

应用程序.js

//= require 'config'
//= require 'jquery'

配置.js.erb

<% require_asset(Rails.env.production? ? 'production_config' : 'other_config') %>

PS 另一个有用的方法是depend_on,当你的资产需要在其他文件更改后重新编译时,它会有所帮助。

前任。如果您需要rails_configgem的一些值

<%
  paths = %w(config/settings.yml config/settings.local.yml config/settings)
  paths.map(&Rails.root.method(:join)).each { |full_path| depend_on(full_path) if File.exist?(full_path) }
%>
于 2015-04-16T15:14:05.050 回答