В Rails 3.1 ваши таблицы стилей могут быть предварительно обработаны с помощью erb.
Теперь предположим, что у вас есть динамический стиль под названием dynamic.css.scss.erb
(.erb
в конце важен!) В app/assets/stylesheets
. Он будет обработан erb (а затем Sass), и поэтому может содержать такие вещи, как
.some_container {
<% favorite_tags do |tag, color| %>
.tag.<%= tag %=> {
background-color: #<%= color %>;
}
<% end %>
}
Вы можете включить его как любую таблицу стилей.
Насколько динамичным оно должно быть?
Обратите внимание, что он будет обработан только один раз, поэтому, если значения изменятся, таблица стилей не будет.
Я не думаю, что есть супер эффективный способ сделать его полностью динамичным, но все еще возможно генерировать CSS для всех запросов. Имея это в виду, вот помощник для этого в Rails 3.1:
def style_tag(stylesheet)
asset = YourApplication::Application.assets[stylesheet]
clone = asset.class.new(asset.environment, asset.logical_path, asset.pathname, {})
content_tag("STYLE", clone.body.html_safe, type:"text/css")
end
Вот как это использовать:
Сначала скопируйте вышеупомянутый помощник в app/helpers/application_helper.rb
.
Затем вы можете включить его на своей странице следующим образом:
<% content_for :head do %>
<%= style_tag "dynamic.css" %>
<% end %>
The rest of your page.
Убедитесь, что ваш макет использует содержимое :head
. Например, ваш layout/application.html.erb
может выглядеть так:
...
<HEAD>
....
<%= yield :head %>
</HEAD>
...
Я узнал об этом благодаря этой записи .