Rails 3.2:在application.js.erb中需要不同的js文件

时间:2012-05-19 22:51:43

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

如何在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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

你可以这样做,但是你需要在application.html.erb中包含这些代码(在我建议的头部动作中)。

如果您将 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。

答案 2 :(得分:0)

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

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

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

的application.js

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

config.js.erb

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

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

实施例。如果您需要rails_config gem

中的某些值
<%
  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) }
%>