以下是该方案:
我的大多数页面使用来自不同页面的CSS,根据默认的Rails编译成一个大的CSS文件,没问题。
但我在控制器中有几页actions
,需要使用不同的CSS页面而不是其他页面。这些只是控制器中的3个动作,否则使用主要的默认编译CSS。
为了实现这一目标,我为需要单独页面的操作调用了特定的布局:
format.html { render :layout => 'doghouse_template' }
这个doghouse_template
的主要内容是:
= stylesheet_link_tag "doghouse_page"
这在开发中可以正常工作,如果有必要,可以在运行中编译页面,但在生产中,我收到以下错误:
ActionView::Template::Error (doghouse_page.css isn't precompiled)
这是因为doghouse_page.css
不单独编译,它被编译到主application.css文件中,所以当然,它不存在于{{1}中}文件夹。
我还应该指出public/assets
实际上并不是一个CSS页面,而是 SCSS 所以我不能将它复制到doghouse.css
而不编译某种类型。
我的问题是,这里有什么解决方案?
我不能将application.css文件用于这些,让我们称之为狗屋页面,因为它会使样式混乱,反之亦然。
我甚至尝试将文件放入application.rb:
public/assets
但没有什么区别。另一方面,如果我提出:
config.assets.precompile += %w( doghouse_page.css.scss )
由于bootstrap / _accordion.scss文件,我在预编译时出错,所以我不能这样做。
我在这里看到了非常相似的问题,但它们倾向于适用于为整个控制器使用不同的CSS而且它没有指定如何不将所有页面编译成一个。
请注意,我不想要将所有CSS页面(表面上只是一个解决方案)分开,只是这个单独的页面。
感谢。
答案 0 :(得分:1)
你应该能够这样做(注意,缺少.scss,即使doghouse_page.css.scss是你的文件):
config.assets.precompile += %w( doghouse_page.css )
如果可以的话,我会考虑这样做。它对我有用。将doghouse_page.css.scss移动到'extra'文件夹中。然后:
config.assets.precompile += %w( extras/*.css )
然后在你的app / views / layout / application ...文件中添加类到控制器和操作的body标签。以下是我在其中一个项目中使用的HAML版本。
%body{:class => ["c-#{controller_name}", "a-#{action_name}", I18n.locale]}
然后,调整doghouse_page.css.scss,使其在带有正确控制器/动作类的body标签下作为范围。
在我的情况下,我通常只想覆盖一些东西或添加一些东西并保留application.css.scss中的大部分内容。这可能不适合你,但如果确实如此,这是一种相当简洁的自定义单个页面/操作的方法。