Rails 3.1引擎的资产

Mar*_*une 27 ruby ruby-on-rails ruby-on-rails-3.1 asset-pipeline

如何在Rails 3.1中的引擎中提供资产?它们应该放在哪里,是否可以自动包含在内?

(最初由Tomas Celizna提出)

Mar*_*une 41

将自动加载所有引擎资产文件夹的路径.

默认情况下不会加载资产本身.这是可以理解的,因为加载完成后require_tree .,从当前文件夹(即主应用程序资产'文件夹)加载所有css/js,但没有说明引擎资产.

简单的解决方案是要求用户在application.js/css或其他任何需要的地方要求js/css.正确加载路径后,用户只需指定资产名称(我建议使用引擎名称).例:

附加于main_app/app/assets/javascripts/application.js:

//= require your_engine_name
Run Code Online (Sandbox Code Playgroud)

如果您已将js拆分为不同的文件,则您的文件your_engine_name/app/assets/javascripts/your_engine_name.js可能具有以下内容:

//= require_tree .
Run Code Online (Sandbox Code Playgroud)

这将加载所有js文件your_engine_name/app/assets/javascripts/,作为"." 指的是本地文件夹(在这种情况下是引擎的javascripts的文件夹).

请注意,设置时ActionView::Helpers::AssetTagHelper.register_javascript_expansion似乎没有任何效果config.use_sprockets.我希望他们至少会在这种情况下发出警告.

如果您有一个rake任务来安装引擎,那么您可以执行追加到application.js.

用户包含它的另一种方法是插入<%= javascript_include_tag "your_engine_name" %>erb布局.

我认为没有办法自动插入它