Использование только релевантных ресурсов с Rails 3.2 + Sprockets + LESS - PullRequest
2 голосов
/ 31 января 2012

Я немного новичок в Rails, пока все хорошо. Конвейер / звездочки активов довольно аккуратны, но я немного запутался. При создании лесов для моих различных контроллеров отдельные файлы css / SCSS помещались в app / assets / stylesheets. Но для моего проекта я использую LESS, а не SCSS, поэтому я заменил их на файлы .css.less.

Проблема, с которой я сталкиваюсь, заключается в том, что если я добавлю CSS в контроллер (например, назовем его «home.css.less»), он будет включен в каждое представление, а не только в представления, принадлежащие «home» контроллер. Если я удалю "* = require_tree." из файла application.css файл не включается ни в какие представления.

Как я могу указать код CSS для конкретного контроллера / представления, используя конвейер ресурсов Rails?

application.css:

/*
  *= require twitter/bootstrap
  *= require_self
  *= require "application_custom"
*/

home.css.less:

body {
  background: asset-url("circles.png") no-repeat;
}

Вышеуказанное приводит к тому, что фон не применяется даже к представлениям контроллера дома.

1 Ответ

3 голосов
/ 31 января 2012

Это довольно распространенный запрос;на многих сайтах есть CSS, специфичные для домашней страницы, которые они не хотят применять на всем сайте.

Я сделаю пару комментариев по этому поводу, прежде чем предлагать решение.

Цель конвейера - представить один файл CSS (и один файл JS) клиентам.Дайджест добавлен, чтобы разрешить добавление заголовков серверов, которые заставляют удаленных клиентов хранить их копии в своем локальном кеше.

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

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

Существует как минимум два общих решения:

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

<%= stylesheet_link_tag "application", controller_name %>

Чтобы это работало в производственной среде, вы должны указать rails прекомпилировать все отдельные CSS-файлы (в application.rb):

config.assets.precompile << '*.css'

Второе - добавить помощника для рендеринга CSS только тогда, когда это требуется от представления.

Я рекомендую лучшее решение для этого вопроса .Вам придется изменить имена помощников для CSS.Это будет отображать тег для требуемого CSS только тогда, когда он установлен в представлении.

...