我正在向我的应用程序添加功能,允许管理员为所有用户更改引导程序主题的原色。问题在于,一旦管理员更改了它们的颜色(我将其存储在Rails.configuration中),资产就不会重新编译,这意味着颜色不会改变。
是否可以通过控制器重新编译资产?
在我的_variables.scss.erb
$primary: <%= Rails.configuration.color %>;
$theme-colors:("primary":$primary);
在我的控制器中
Rails.configuration.color = params[:color]
redirect_to root_path
我已经尝试过将颜色值保存到数据库中,并在应用程序启动时(在初始化程序中)将颜色值读取到Rails.configuration.color中,但是再次没有重新编译资产
答案 0 :(得分:1)
我不建议您使用Ruby全局颜色变量来更改用户界面颜色。主要原因:您无法重新编译资产,因为每个用户都将使用主题色。
我的建议:实施多少个可以根据需要重新分配$theme-colors
值的类,如下所示:
# _variables.scss
$theme-colors: black; # default color
.blue-theme {
$theme-colors: blue;
}
.yellow-theme {
$theme-colors: yellow;
}
最后,在application.html.erb
(或等效名称)中,根据用户偏好更改class-name
:
# apllication.html or equivalent
<body class="<%= @class_name %>">
</body>
肥胖:如果您使用Rails.configuration
,则一个用户使用UI主题进行交易的操作将交易所有用户的主题,而不是使用Rails.config
将该选项放入其中session
,引用current_user
并保留此首选项,或在数据库中保护此信息。