DRY MVC声明最小控制器特定资产管道

时间:2012-02-17 10:40:41

标签: ruby-on-rails asset-pipeline

有几种方法可以在Rails中包含特定于控制器的资产:

非DRY的一个选项是每个顶级视图中的add = yield :head in the layoutcontent_for(:head) { ... }如果资产是特定于控制器的,则只应指定一次每个控制器,而不是每个视图。当然,这种方法对于 view - 特定资产来说非常棒。

非声明的第二个选项是add an asset corresponding to the controller name if it exists。我不应该检查某些东西是否存在,而应该简单地说(在适当的情况下)它存在并且必须包括在内。此外,我不确定是否会缓存响应以避免运行时性能损失。从积极的方面来看,这种方法不需要对视图或控制器进行任何更改,但它可能会打开名称冲突的可能性,尤其是对于传统模型。

第三种选择是include all assets of a type in a single file。浏览器不应下载他们不需要的资产,这会使调试应用程序变得更加困难。如果总资产规模仍然可管理,则此选项可以正常使用。

DRY >使用非常少的代码打破 MVC 模型的方式?

1 个答案:

答案 0 :(得分:0)

如果在应用程序布局中使用以下include命令,Rails将仅将控制器特定资产文件中的代码提供给指定的控制器:

<%= javascript_include_tag params[:controller] %>
<%= stylesheet_link_tag params[:controller] %>

我怀疑如果你这样做,你还需要做以下事情:

  • 仍然包含<%= javascript_include_tag :application %><%= stylesheet_link_tag :application %>以获取所有跨控制器资产
  • 检查require_tree .指令如何工作以确保application.css<%= stylesheet_link_tag params[:controller] %>未加载控制器特定资产,实际上您可能需要删除{{1}并将任何交叉控制器表直接加载到require_tree .文件

有关详细信息,请参阅第2部分中的Rails Guide on the Asset Pipeline