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

Ruby on rails 如何在布局之外的erb中包含css或javascript?,ruby-on-rails,view,erb,Ruby On Rails,View,Erb,很抱歉,我在编写我的第一个rails应用程序时,提出了一个略显粗鲁的问题 我了解布局视图的概念,但是如果您正在使用它们,有没有办法包含视图特定的js或css文件?例如,我有layouts/products.html.erb,对于products/edit.html.erb我想要products\u edit.css,但我不希望所有产品视图都使用css,实现这一点的最佳实践是什么?如果布局中有标记,则不能 您可能需要该控制器操作的不同布局。在渲染时如下所示: render :action =&g

很抱歉,我在编写我的第一个rails应用程序时,提出了一个略显粗鲁的问题

我了解布局视图的概念,但是如果您正在使用它们,有没有办法包含视图特定的js或css文件?例如,我有
layouts/products.html.erb
,对于
products/edit.html.erb
我想要
products\u edit.css
,但我不希望所有产品视图都使用css,实现这一点的最佳实践是什么?

如果布局中有
标记,则不能

您可能需要该控制器操作的不同布局。在渲染时如下所示:

 render :action => "index", :layout => "some_other_layout
您还可以使用控制器类中的此行为整个控制器设置不同的默认布局:

layout "some_other_layout"

查看API文档,在布局方法中使用条件可以做一些复杂的事情。

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

<%= stylesheet_link_tag 'edit' if params[:action] == 'edit' %>
products/edit.html.erb

<head>
  ...
  <%= yield(:header) if @content_for_header %>
</head>
<% content_for :header do -%>
  <%= stylesheet_link_tag 'edit_product' %>
<% end -%>

您可以在布局的head标记中添加样式表标记,方法如下:

layouts/products.html.erb:

<head> ... <%= yield :css %> ... </head> ... ... products/edit.html.erb

<% content_for :css do stylesheet_link_tag 'products_edit' end %>
-你错了。使用yield(:header)和content_for:header,您可以为head标记指定额外的内容。这并没有改变以下事实,即它的其余部分是解决问题的完美合法解决方案。不,但它违反了rails非常喜欢的枯燥原则。这是怎么回事?我可以通过分区解决布局中的重复问题,如果有足够的话。我想说的是,你的解决方案将太多关于版面的知识下放到了模板中,而这些模板除了清楚地描述合同外,本应不知道它们包含在什么中。使用不同的版面只是添加一个css文件,会在版面中引入重复的代码。当你可以添加功能,这是非常强大和非常干燥。你真的不应该对否决票这么小心谨慎,不要太在意。我不确定你是否想要“是的,你需要它,视图使用一个名为capture的助手,它获取一个块,这个助手会将所有输出重定向到一个变量,然后在不同的位置渲染。因此,我的解决方案为您提供了更大的灵活性和更自然的感觉。在Rails 3.0中,您需要使用
if content\u for?:header
,而不是Rails 5中的
@content\u for_header
在没有
的情况下为我工作,如果@content\u for_header