2012-03-06 4 views
1

Я работаю над приложением Rails 3.1 и нуждаюсь в решении для динамического компиляции css. В моем приложении я разрешаю пользователям устанавливать цвета и хотел бы условно использовать «живую компиляцию» в одном SCSS-файле, который управляет всеми цветами, все мои другие файлы SCSS все равно должны быть предварительно скомпилированы. После некоторого поиска я ... озадачен о том, как procede Любые предложения будут полезныУсловная компиляция css в RAILS 3.1

заранее спасибо Fou все ваши идеи

Девин

пс - Я должен также упомянуть, что мне нужно использовать переменную экземпляра в SCSS

ответ

1

Вы можете предварительно обработать ваш файл Sass с помощью ERb. Это позволит вам использовать экземпляр переменные, установленные в контроллере или просмотр в файле .scss. Сам файл можно просто рассматривать как обычный вид, отображаемый контроллером как часть действия.

Этот код не проверен, но он должен дать вам место для начала. Предполагается, что вы сохраняете цветовые предпочтения пользователя как часть самой модели User.

Сначала определите пользовательское действие на UsersController:

# config/routes.rb 
match '/users/:id/styles' => 'users#styles', :as => :user_styles 

Ссылка на "таблицы стилей" в макете:

# app/views/layouts/application.html.erb 
= stylesheet_link_tag 'application', user_styles_path(current_user, :format => 'css') 

Определите действие в контроллере. Вы можете делать все, что вы хотите получить предпочтения пользователя здесь:

# app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def styles 
    @colors = User.find(params[:id]).colors 
    end 
end 

Это действие будет автоматически сделать этот вид:

# app/views/users/styles.css.scss.erb 
$background-color: <%= @colors[:background] %>; 

body { 
    background-color: $background-color; 
} 

Adapt по мере необходимости.

+0

Awesome, спасибо за место, чтобы начать – MrDevin

+0

Добро пожаловать. Убедитесь, что вы [принимаете ответ] (http://stackoverflow.com/faq#howtoask), если он работает для вас. – Brandan

+0

В моем контроллере мне понадобилось «render: text => Sass :: Engine.new (render_to_string, syntax:: scss) .render', чтобы получить scss для рендеринга. Другой мудрый прекрасный ответ, спасибо снова. – MrDevin

Смежные вопросы