所以我看到很多关于在CSS文件中使用erb的讨论。我可以使用<%=%>来获取ERB来处理CSS文件语法并将.erb添加到文件中,但我真正需要的是访问控制器中的实例变量。
searches_controller.rb
def new
@search = Search.new
@school = School.find(params[:school])
end
我真正想做的是:
searches.css.scss.erb
h1.logo {
color: <%= @school.primary_color %>;
}
但ERB会抛出错误,因为@school是零。有没有办法要求控制器访问这些实例变量?
我能想到的另一种方法是将它作为数据属性嵌入到视图中,然后使用JS在前端更改它。这让我感觉更好,因为CSS文件不会改变,每次都需要重新发送,但它也不会那么优雅。
答案 0 :(得分:9)
您还需要考虑在预编译的资产场景中,CSS将在编译期间通过Sprockets运行,因此您最终会得到一个静态颜色(假设@school
实际上是实例化的,它不会不会。这是不可取的,因为每个学校都会有相同的颜色(无论在编译阶段发生了什么)。
对于这样的自定义品牌,我们让用户指定颜色,并在布局中包含一个CSS块:
:css
h1.logo {
color: <%= @school.primary_color %>;
}
这并不理想,但如果你有少量的定制似乎工作得相当好。
答案 1 :(得分:2)
我宁愿在您的视图中使用@school.primary_color
。这应该有效:
<h1 style="color:#{@school.primary_color}">@school.name</h1>
请记住使用双引号进行插值。