所以我将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 %>
并且有效
答案 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,但是假设在编译期间它将被调用一次。它不应该与请求及其环境有关。