2017-08-14 62 views
2

所以我改变了我的pages.scss扩展pages.scss.erb但如果我尝试(BTW我用色器件):Ruby on Rails的在css.erb CURRENT_USER不承认

<% if current_user.admin == true%> 
    body { background-color: white} 
<% else %> 
    body { background-color: black} 
<% end %> 

它给了我一个错误: 显示/app/views/layouts/application.html.erb其中线#5提出: 未定义局部变量或方法current_user为#<#:0x0000000e9e5be8>

但如果我尝试代替CURRENT_USER User.current它不给我一个错误,但代码不起作用....我试过使用(我在一个值之间循环):

<% a = true %> 
    <% if a == true%> 
     body { background-color: white} 
    <% else %> 
     body { background-color: black} 
    <% end %> 

和它的工作要实现假定每个请求预编译CSS

+1

您的'current_user'方法在哪里定义?在助手,控制器还是其他地方? –

+0

不应在模型中定义'current_user'。然而,它的定义,它应该是控制器的关注。我认为你需要回顾一下你是如何处理认证的。 –

+0

@TomLord好吧然后我应该如何在应用程序控制器中定义它 –

回答

1

结果。动态资产预编译对于开发环境来说是正常的,以加速您的开发过程。但是,在生产环境或分期环境中,资产通常会在部署期间编译一次(rake资产:预编译)。资产不仅仅是静态的,而且通常由nginx服务于生产。

所以,如果你真的想要一些动态的CSS,根据用户的角色,考虑把它放到布局。从那里你将能够使用帮助器方法和控制器变量。

<style type="text/css"> 
    <% if current_user.admin == true %> 
    body { background-color: white } 
    <% else %> 
    body { background-color: black } 
    <% end %> 
</style> 

或者,更好的方式,定义CSS类为管理员和普通用户在你的.css文件,然后,在你的.html.erb模板中使用它们取决于你current_user

我尝试使用(我的一个数值之间循环):

<% a = true %> 
<% if a == true%> 
    body { background-color: white } 
<% else %> 
    body { background-color: black } 
<% end %> 

和它的工作

它的工作,因为Rails的资产管线支持在通用嵌入式红宝石,但它假定在编译期间它将被调用一次。它不应该与请求和它的环境有关。