Как включить css или javascript в erb, который находится за пределами макета?
Извините за незначительный вопрос noobish, поскольку я пишу свое первое приложение для рельсов.
Я получаю представление о макетном представлении, но если вы его используете, есть ли способ включить конкретный js или css файл вида? Например, у меня есть layouts/products.html.erb
, а для products/edit.html.erb
я хочу products_edit.css
, но я не хочу, чтобы этот css для всех представлений продукта, какова наилучшая практика для этого?
Ответы
Ответ 1
Если у вас есть общий файл edit.css, я бы предложил, если в вашем макете
<%= 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 -%>
Ответ 2
Вы можете добавить тег таблицы стилей внутри основного тега макета, выполнив что-то вроде этого:
Макеты/products.html.erb:
<head>
...
<%= yield :css %>
...
</head>
продукты/edit.html.erb
<% content_for :css do
stylesheet_link_tag 'products_edit'
end %>
Ответ 3
Вы не можете, если тэг </head>
находится в вашем макете.
Возможно, вам понадобится другой макет для этого действия контроллера. Как показано на рендере:
render :action => "index", :layout => "some_other_layout
Также вы можете установить другой макет по умолчанию для всего контроллера с этой строкой в классе контроллера:
layout "some_other_layout"
Проверьте документы API, некоторые сложные вещи, которые вы можете сделать с условными выражениями для этого метода макета.