是否可以从Rails中的控制器重新编译资产?

时间:2019-03-26 20:43:33

标签: ruby-on-rails ruby sass

我正在向我的应用程序添加功能,允许管理员为所有用户更改引导程序主题的原色。问题在于,一旦管理员更改了它们的颜色(我将其存储在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中,但是再次没有重新编译资产

1 个答案:

答案 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并保留此首选项,或在数据库中保护此信息。