@MildFuzz В соответствии с просьбой, я добавил более подробный пример.

даю веб-сайт с Rails 3, который позволит пользователям создавать профили с разными макетами и цветовыми схемами. Я уже использую SASS, и переменные были бы неоценимы, если бы я мог сделать что-то вроде этого ...

<link src="base_styles.css" rel="stylesheet">
<link src="color_schemes/users_choice.css" rel="stylesheet">
<link src="layouts/users_choice.css" rel="stylesheet">

… Где определение цветовой схемы будет в основном (полностью?) Переменными SASS, определяющими цвета, используемые в макете. Очевидно, я не могу просто связать файлы SASS или CSS, как это, мне нужно импортировать их в SASS.

Как я могу динамически импортировать файлы SASS в анализатор во время запроса, а затем кэшировать полученные файлы CSS для дальнейшего использования?

Я подумал о том, чтобы пойти по безобразному пути построения каждой возможной комбинации при развертывании, но это все еще оставляет меня в покое, если я хочу позволить пользователям устанавливать свои собственные цвета в будущем. Кажется, что такой низко висящий фрукт с SASS, что он также может быть реализован.

Ответы на вопрос(1)

Решение Вопроса

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

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

# unless cached_copy_exists
template = %Q{
  @import '/path/to/color_scheme';
  @import '/path/to/layout';
}

output = Sass::Engine.new(template, :syntax => :scss).render

# output rendered CSS to file for inclusion in HTML template

Чтобы разрешить пользовательские цвета, пользовательский ввод может быть собран в переменные SASS css в строку и добавлен перед файлом шаблона, передаваемым в механизм синтаксического анализа / рендеринга Sass.

Обновить:

Для каждого запроса приведем более конкретный пример того, как это работает, сосредоточив внимание только на использовании переменных Sass и предварительно закодированной таблицы стилей Sass (упрощенной для выделения этой конкретной проблемы):

# config/routes.rb
resources :stylesheets, only: [:show]

# app/controllers/stylesheets_controller.rb
class StylesheetsController < ApplicationController
  layout nil

  def show
    styles = Stylesheet.find(params[:id])
    base_stylesheet_path = Rails.root.join('app', 'assets', 'profile.scss')

    # Build the string of SCSS we'll pass to the Sass rendering engine
    @sass = <<-SASS
      #{styles.to_sass}
      @import "#{base_stylesheet_path}";
    SASS

    # Cache for long time
    response.headers['Cache-Control'] = "public, max-age=#{1.year}"

    respond_to do |format|
      format.css
    end
  end
end

# app/views/stylesheets/show.css.erb
<%= raw Sass::Engine.new(@sass :syntax => :scss).render -%>

# app/models/stylesheet.rb
class Stylesheet < ActiveRecord::Base
  serialize :variables, JSON

  def to_sass
    # Convert a hash of variables into SCSS
    variables.each_pair.map do |name, value|
      "$#{name}: #{value};"
    end.join("\n")
  end
end

# example for the stylesheet model 
stylesheet = Stylesheet.new
stylesheet.variables[:primary_color] = "#0000ff"
stylesheet.save   
 coreyward03 апр. 2014 г., 18:44
@MildFuzz В соответствии с просьбой, я добавил более подробный пример.
 Mild Fuzz26 мар. 2012 г., 13:04
Как вы думаете, вы могли бы прояснить свои шаги немного яснее? Немного нуб!

Ваш ответ на вопрос