如何在Rails 3.1中动态地包含不同的css文件和资产管道

时间:2012-01-02 13:33:18

标签: ruby-on-rails-3.1 asset-pipeline

我正在升级到rails 3.1。在我的旧application.html.erb中,我有一行:

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

如您所知,我想在会话[:theme]上更改样式库。 感谢This link,我取得了一些进展。我将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 个答案:

答案 0 :(得分:2)

应用程序清单是在部署时编译的,或者如果您正在为资产提供服务而编译和缓存,因此您有两个问题。

第一个是没有可用的会话值,第二个是即使你可以改变它,它也行不通;它将在第一次编译清单时进行缓存。

您可以返回初始解决方案,并在配置中添加一个以使其正常工作。

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

我假设themes位于默认的样式表位置。