Ruby on rails 在CSS中访问Rails控制器实例变量

Ruby on rails 在CSS中访问Rails控制器实例变量,ruby-on-rails,ruby,erb,instance-variables,scoping,Ruby On Rails,Ruby,Erb,Instance Variables,Scoping,所以我看到了很多关于在CSS文件中使用erb的讨论。我可以通过使用语法并向文件中添加.ERB来让ERB处理CSS文件,但我真正需要的是访问控制器中的实例变量 搜索\u controller.rb def new @search = Search.new @school = School.find(params[:school]) end h1.logo { color: <%= @school.primary_color %>; } 我真正想做的是: searches

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

搜索\u controller.rb

def new
  @search = Search.new
  @school = School.find(params[:school])
end
h1.logo {
  color: <%= @school.primary_color %>;
}
我真正想做的是:

searches.css.scss.erb

def new
  @search = Search.new
  @school = School.find(params[:school])
end
h1.logo {
  color: <%= @school.primary_color %>;
}
h1.logo{
颜色:;
}
但雇员再培训局会抛出一个错误,因为@school为零。是否有某种方法要求控制器访问这些实例变量


我能想到的唯一其他方法是将其作为数据属性嵌入视图中,然后使用JS在前端对其进行更改。因为CSS文件不会改变,而且每次都需要怨恨,但这也会让我觉得更好,

您还需要考虑在预编译的资产场景中,CSS将在编译期间通过链轮运行,因此您将得到一个静态的颜色。(假设
@school
实际上是实例化的,而不是实例化的)。这是不可取的,因为每个学校都会有相同的颜色(无论在编译阶段发生了什么)

对于这样的定制品牌,我们允许用户指定其颜色,并在布局中包含一块CSS:

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

这并不理想,但如果您有少量的定制,它似乎工作得相当好。

在您看来,我宁愿使用
@school.primary\u颜色。这应该可以:

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

请记住在插值时使用双引号。

我会尽可能早地处理nil。因此,在这种情况下,视图将永远不会被馈送
nil
对象。但如果这是一个问题,那么整个视图实际上应该被包装在一个条件中。这并不仅仅限于此用法。唯一的问题是如果您有要在多个视图中的多个位置使用该颜色,您将得到一些无法维护的代码。这是一个很好的观点。根据学校的数量,甚至可以在CSS文件中为每个学校定义常量,而不是在db中。谢谢。我希望在视图之外处理它,但这似乎是w好的。你能提供更多关于在版面中添加css块的细节吗…?我想根据屏幕大小交换图像,需要一种方式让我的媒体查询看到我的实例变量。