Как динамически включать различные CSS-файлы с конвейером ресурсов в Rails 3.1 - PullRequest
1 голос
/ 02 января 2012

Я обновляюсь до рельсов 3.1. в моем старом application.html.erb у меня есть строка этого:

<%= stylesheet_link_tag "themes/#{session[:theme].nil? ? 'base' : 
     session[:theme]}/ui.all" %>

Как вы знаете, я хочу изменить базу стилей в сеансе [: theme]. Благодаря По этой ссылке я немного продвинулся. Я изменил свой application.css.erb на это:

/*
* *= require_self
* */
<%
    require_asset("themes/#{session[:theme].nil? ? 'base' : 
                    session[:theme]}/ui.all" )
k%>
/* rest of file omitted */

Но он жалуется на это:

undefined local variable or method `session' for #<#<Class:0x95152e4>:0x9c6c8bc>
 (in /home/rocky/work/apps/fanfan/app/assets/stylesheets/application.css.erb)

1 Ответ

2 голосов
/ 03 января 2012

Манифест приложения компилируется во время развертывания или компилируется и кэшируется, если вы работаете с активами, поэтому у вас есть две проблемы.

Первая - отсутствие доступного значения сеанса, а вторая -что даже если бы вы могли изменить это, это не сработает;он будет кэширован при первой компиляции манифеста.

Вы можете вернуться к исходному решению и сделать одно дополнение к вашей конфигурации, чтобы оно заработало.

config.assets.precompile += ['themes/theme1_name/ui.all', 'themes/theme2_name/ui.all', etc]

Япри условии, что themes находится в расположении таблиц стилей по умолчанию.

...