7

そのため、CSS ファイルで erb を使用することについて、SO に関する多くの議論を見てきました。<%= %> 構文を使用してファイルに .erb を追加することで、ERB に CSS ファイルを処理させることができますが、実際に必要なのはコントローラーのインスタンス変数にアクセスすることです。

search_controller.rb

def new
  @search = Search.new
  @school = School.find(params[:school])
end

私が本当にやりたいことは次のとおりです。

searchs.css.scss.erb

h1.logo {
  color: <%= @school.primary_color %>;
}

しかし、@school が nil であるため、ERB はエラーをスローします。コントローラーがこれらのインスタンス変数にアクセスするように要求する方法はありますか?

私が考えることができる唯一の他の方法は、それをデータ属性としてビューに埋め込み、JS を使用してフロントエンドで変更することです。CSSファイルは変更されず、毎回再送信する必要がないため、これは潜在的に優れていると思いますが、エレガントではありません.

4

2 に答える 2

9

また、コンパイル済みのアセットシナリオでは、CSSがコンパイル中にSprocketsを介して実行されるため、静的な色になってしまうことも考慮する必要があります(@school実際にインスタンス化されたと仮定すると、そうではありません)。すべての学校が同じ色になるため、これは望ましくありません(コンパイル段階で発生したものは何でも)。

このようなカスタムブランディングでは、ユーザーが色を指定し、CSSのブロックをレイアウトに含めることができます。

:css
    h1.logo {
        color: <%= @school.primary_color %>;
    }

理想的ではありませんが、カスタマイズの数が少ない場合は、かなりうまく機能するようです。

于 2012-12-19T01:28:09.127 に答える
2

私はむしろ@school.primary_colorあなたの見解で使用したいと思います。これはうまくいくはずです:

<h1 style="color:#{@school.primary_color}">@school.name</h1>

補間には二重引用符を使用することを忘れないでください。

于 2012-12-19T01:31:22.227 に答える