7

所以我看到很多关于在你的 CSS 文件中使用 erb 的讨论。我可以让 ERB 通过使用 <%= %> 语法并将 .erb 添加到文件中来处理 CSS 文件,但我真正需要的是访问控制器中的实例变量。

search_controller.rb

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

我真正想做的是:

搜索.css.scss.erb

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

但是 ERB 会抛出一个错误,因为 @school 是 nil。有没有办法要求控制器访问这些实例变量?

我能想到的唯一另一种方法是将其作为数据属性嵌入到视图中,然后使用 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 回答