在css.erb

时间:2017-08-14 13:02:05

标签: css ruby-on-rails ruby

所以我将pages.scss扩展名更改为pages.scss.erb但是如果我尝试(BTW我使用设计):

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

它给了我一个错误: 显示/app/views/layouts/application.html.erb,其中第5行引发: 未定义的局部变量或方法current_user用于#&lt;#:0x0000000e9e5be8&gt;

但如果我尝试User.current而不是current_user,它不会给我一个错误,但代码不起作用....我尝试使用(我在a的值之间循环):

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

并且有效

1 个答案:

答案 0 :(得分:1)

您希望实现的结果假定在每个请求上预编译css。动态资产预编译对于开发环境来说是正常的,以加快您的开发过程。但是,在生产环境或登台环境中,资产通常在部署期间编译一次(rake assets:precompile)。资产不仅仅是静态的,而且通常由生产商提供,例如,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模板中根据您的{{1}使用它们}。

  

我尝试过使用(我在a的值之间循环):

current_user
     

并且有效

它之所以有效,是因为Rails资产管道通常支持嵌入式ruby,但是假设在编译期间它将被调用一次。它不应该与请求及其环境有关。