如何在custom.css.erb中访问rails实例变量(@theme)?

时间:2017-11-21 06:04:28

标签: css ruby-on-rails ruby ruby-on-rails-4 asset-pipeline

我有主题模型,我有3场

1)导航栏 2)标题 3)包含

我想从custom.css.erb访问实例变量(@theme),以便我如何访问params。

Controller.rb

def show
 @params = params[:name].downcase
 @cmp = Company.find_by(name: @params)
 @theme = Theme.find_by(company_id:  @cmp.id)
end

custom.css.erb

<% if @theme.present? %>
.navbar.navbar-inverse {
    background-color: <%= @theme.navbar %> !important;
}
.page-header {
    background-color: <%= @theme.header %> !important;
}
.panel.panel-flat {
    background-color: <%= @theme.contain %> !important;
}
.panel-heading {
    background-color: <%= @theme.contain %> !important;
}
<% else %>
.navbar.navbar-inverse {
    background-color: #37474F !important;
}
.page-header {
    background-color: #ffffff !important;
}
.panel.panel-flat {
    background-color: #ffffff !important;
}
.panel-heading {
    background-color: #ffffff !important;
  }      

我得到了像下面的错误。

enter image description here

1 个答案:

答案 0 :(得分:1)

使用实例变量的动态css样式不应放在css.erb / css.haml中,因为它无法正常工作。 考虑资产预编译。 Rails将在启动应用程序之前预编译资产,之后它将是静态资源。所以,你的动态不能在这里实现

解决方案:

将这些动态css样式放在布局

<强> /layout/home.html.haml

:css
  .div {
    color: <%=@mycolor%>;
    ...
  }

/layout/home.html.erb (如果您有erb模板)

<style type="text/css">  
.div {
   color: <%=@mycolor%>;
   ...
} 
</style>