2012-03-06 16 views
1

私はRails 3.1アプリを開発中で、cssを動的にコンパイルするための解決策が必要です。私のアプリケーションでは、ユーザーが色を設定できるようにしており、すべての色を制御する1つのSCSSファイルで条件付きで「ライブコンパイル」を使用したいと考えています。 。。。procedeする方法について困惑任意の提案を参考になる事前にRAILS 3.1のCSSの条件付きライブコンパイル

おかげで酔ってあなたのアイデアのすべて

デヴィン

PS - 私はまた、私はSCSSでインスタンス変数を使用する必要があることを言及する必要があります

答えて

1

ERbでSassファイルを前処理することができます。これにより、インスタンスコントローラまたはビュー内の変数は、.scssファイル内で設定します。ファイル自体は、アクションの一部としてコントローラによって表示される通常のビューとして扱うことができます。

このコードはテストされていませんが、開始する場所が必要です。ここでは、ユーザーのカラー設定をUserモデルの一部として保存することを前提としています。あなたのレイアウトで "スタイルシート" に

# 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') 

あなたのコントローラにアクションを定義

まずUsersController上のカスタムアクションが定義されます。あなたはここで、ユーザの嗜好を取得するために、やりたいことができます:

# 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; 
} 

は適応します。

+0

おかげさまで、ありがとうございました。 – MrDevin

+0

よろしくお願いいたします。問題がなければ[回答を受け入れる](http://stackoverflow.com/faq#howtoask)を確認してください。 – Brandan

+0

私のコントローラでは、scssをレンダリングするために 'render:text => Sass :: Engine.new(render_to_string、構文::scss).render'が必要でした。他の賢明な答えは、もう一度ありがとう。 – MrDevin

関連する問題