Как включить CSS или JavaScript в Erb, который находится за пределами макета? - PullRequest
26 голосов
/ 26 января 2009

Извините за слегка нубистский вопрос, так как я пишу свое первое приложение для rails.

Я понял идею макета, но если вы используете их, есть ли способ включить специфичный для вида файл js или css? Например, у меня есть layouts/products.html.erb, а для products/edit.html.erb я хочу products_edit.css, но я не хочу, чтобы этот css для всех представлений продуктов, какова лучшая практика для этого?

Ответы [ 3 ]

47 голосов
/ 26 января 2009

Если у вас есть общий файл 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 -%>
10 голосов
/ 26 января 2009

Вы можете добавить тег таблицы стилей внутри заголовка макета, выполнив что-то вроде этого:

Макеты / products.html.erb:


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

Продукты / edit.html.erb


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

0 голосов
/ 26 января 2009

Вы не можете, если ваш тег </head> находится в вашем макете.

Возможно, вы захотите другой макет для этого действия контроллера. Вот так на рендере:

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

Также вы можете установить другое расположение по умолчанию для всего контроллера с помощью этой строки в классе контроллеров:

layout "some_other_layout"

Проверьте документы API, есть некоторые сложные вещи, которые вы можете сделать с условными обозначениями в этом методе макета.

...