如何在布局之外的erb中包含css或javascript?

时间:2009-01-26 16:02:48

标签: ruby-on-rails view erb

对于稍微有点犹豫不决的问题感到抱歉,因为我正在编写我的第一个rails应用程序。

我了解了布局视图,但是如果您正在使用它们,是否有任何方法可以包含特定于视图的js或css文件?例如,我有layouts/products.html.erb,而products/edit.html.erb我想要products_edit.css,但我不希望所有产品视图的css,实现这一目标的最佳做法是什么?

3 个答案:

答案 0 :(得分:47)

如果你有一个通用的edit.css文件,我建议在你的布局中使用if

<%= stylesheet_link_tag 'edit' if params[:action] == 'edit' %>

否则,您可以content_for使用yield将额外的标签添加到头部。

layout.html.erb

<head>
  ...
  <%= yield(:header) if @content_for_header %>
</head>

products/edit.html.erb

<% content_for :header do -%>
  <%= stylesheet_link_tag 'edit_product' %>
<% end -%>

答案 1 :(得分:10)

您可以通过执行以下操作在布局的head标记内添加样式表标记:

布局/ products.html.erb:


    <head>
        ...
        <%= yield :css %>
        ...
    </head>

产品/ edit.html.erb


<% content_for :css do
    stylesheet_link_tag 'products_edit'
end %>

答案 2 :(得分:-7)

如果您的</head>代码位于您的布局中,则不能。

您可能需要该控制器操作的不同布局。就像在渲染上一样:

 render :action => "index", :layout => "some_other_layout

此外,您可以在控制器类中使用此行为整个控制器设置不同的默认布局:

layout "some_other_layout"

检查API文档,您可以使用该布局方法上的条件进行一些复杂的操作。