0

这是场景:

我的大多数页面都使用来自不同页面的 CSS,这些 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文件中,所以文件夹中当然不存在public/assets

我还应该指出,这doghouse.css不是真正的 CSS 页面,而是SCSS,所以我不能在public/assets不编译某种类型的情况下将其复制到。

我的问题是,这里的解决方案是什么?

我不能为这些使用 application.css 文件,我们称它们为狗屋页面,因为它会弄乱样式,反之亦然。

我什至尝试将文件放入 application.rb:

config.assets.precompile += %w( doghouse_page.css.scss )

但并没有什么不同。另一方面,如果我输入:

config.assets.precompile += %w( *.css )

由于 bootstrap/_accordion.scss 文件,我在预编译时遇到错误,所以我不能这样做。

我在这里看到了非常相似的问题,但它们往往适用于对整个控制器使用不同的 CSS,并且没有指定如何不将所有页面编译为一个。

请注意,我不想分离所有的 CSS 页面(这表面上是一种解决方案),只是这个单独的页面。

谢谢。

4

1 回答 1

1

您应该能够做到这一点(注意,缺少 .scss,即使 doghouse_page.css.scss 是您的文件):

config.assets.precompile += %w( doghouse_page.css )

如果可以,我会考虑这样做。这对我来说效果很好。将 doghouse_page.css.scss 移动到“额外”文件夹中。然后:

config.assets.precompile += %w( extras/*.css )

然后在您的 app/views/layout/application... 文件中将类添加到控制器和操作的主体标签。下面是我在一个项目中使用的 HAML 版本。

%body{:class => ["c-#{controller_name}", "a-#{action_name}", I18n.locale]}

然后,调整 doghouse_page.css.scss 使其范围在具有正确控制器/动作类的 body 标记下。

就我而言,我通常只想覆盖一些东西或添加一些东西并保留 application.css.scss 中的大部分内容。这可能对您不起作用,但如果确实如此,它是自定义单个页面/操作的一种相当干净的方法。

于 2013-08-30T15:29:44.340 回答