Как мне использовать специфичные для контроллера таблицы стилей в Rails 3.2.1? - PullRequest
20 голосов
/ 12 февраля 2012

Использование Rails 3.2.1


Я создал простой контроллер с именем Home, используя команду:

rails g controller Home index

И он создал новый контроллер и просмотр для меня:

enter image description here

Обратите внимание на две таблицы стилей: одну «Приложение» и одну «Домашнюю».Я не могу найти какую-либо документацию, подтверждающую это предположение, но я предполагаю, что вы добавили стили, которые будут применяться только к представлениям "Home", в файле Home.css.scss, правильно?

Так кактест, я добавил несколько глобальных стилей в Application.css.scss.erb и запустил приложение.

Стили, примененные как и ожидалось.

Затем я добавил некоторые правила в HomeФайл .css.scss и я посетили представление «Home / index», но стиль в этом файле не был прикреплен ни в качестве отдельной ссылочной ссылки CSS, ни даже в виде отдельного файла Application.css.scss.Меня это очень смущает, так как в комментариях говорится:

// Place all the styles related to the Home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

Почему правила, написанные в Home.css.scss, не применяются к моему сайту?

Ответы [ 4 ]

71 голосов
/ 04 марта 2013

Это может работать таким образом, и Марек совершенно прав, ответ в руководстве.Во введении к разделу 2.1 :

Например, если вы генерируете ProjectsController, Rails также добавит новый файл в app/assets/javascripts/projects.js.coffee, а другой в app/assets/stylesheets/projects.css.scss,Вы должны поместить любой JavaScript или CSS, уникальный для контроллера, в их соответствующие файлы ресурсов, поскольку эти файлы затем могут быть загружены только для этих контроллеров с такими строками, как <%= javascript_include_tag params[:controller] %> или <%= stylesheet_link_tag params[:controller] %>.

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

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

Обычно вы увидите такую ​​запись:

 *= require_tree .

Если вы все еще хотите загрузить некоторые распространенные CSS-файлы, вы можете переместить их в подкаталог и сделать что-то вроде этого:

 *= require_tree ./common

Во-вторых, добавьте в макет вашего приложения предложенный stylesheet_link_tag, например:

<%= stylesheet_link_tag    "application", :media => "all" %>
<%= stylesheet_link_tag params[:controller] %>

В этом примере мы сначала загружаем файл css приложения, затем загружаем любой файл css, соответствующий текущему контроллеруимя.

14 голосов
/ 07 апреля 2014

Я решил эту проблему с помощью простого решения.Я добавляю к body имя контроллера как класс, редактируя views/layouts/application.html.slim:

body class=controller.controller_name

Или views/layouts/application.html.erb:

<body class="<%= controller.controller_name%>">

И затем в моем CSS я просто использую body.controller_name как пространство имен :

/* example for /users/ */

body.users {
    color: #000;
}

body.users a {
    text-decoration: none;
}

Для небольших проектов я думаю, что это хорошо.

7 голосов
/ 12 февраля 2012

Я не думаю, что это работает таким образом (Home.css применяется только к Home действиям контроллера). Различные файлы просто для разделения, чтобы было понятнее, что описывают правила CSS. Вы можете прочитать это руководство о конвейере активов. Я предполагаю, что вы изменили значение по умолчанию application.css.scss и удалили строку, импортирующую все CSS-файлы из app/assets/stylesheets.

4 голосов
/ 26 сентября 2013

TL; DR:

Игнорировать комментарий, он не сделан Sass. Но положите: @import "*"; в ваш файл application.css.scss, и он автоматически импортирует все файлы scss контроллера.

Полный текст:

Отказ от ответственности: Это мое текущее понимание потока конвейера активов с и без Sass.

Я думаю, что этот комментарий написан стандартным конвейером Rails Asset (звездочки), а не Sass:

// Place all the styles related to the Home controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

Стандартный конвейер обрабатывает файлы scss, но не предполагает файл application.css. scss . Но если вы создадите такой файл с помощью Sass, то Sass скомпилирует его в файл application.css .

Если вы используете обычный конвейер ресурсов Rails без Sass, то sprockets автоматически загрузит файл css в файл application.css (если в этом файле есть строка *= require_tree . по умолчанию).

При использовании Sass с файлом application.css. scss Sass скомпилирует этот файл в файл application.css . (Я предполагаю, что он будет перезаписывать или иметь приоритет над любым файлом application.css, который у вас уже был).

Чтобы файл home.css.scss (и другие файлы контроллера) автоматически включался, поместите эту строку в файл application.css.scss :

@import "*";

Для справки смотрите этот вопрос: Можно ли импортировать весь каталог в sass с помощью @import?

...