【问题标题】:Is it possible to recompile assets from the controller in Rails?是否可以从 Rails 中的控制器重新编译资产?
【发布时间】:2019-03-27 06:06:03
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby sass


    【解决方案1】:

    我不建议您使用 Ruby 全局颜色变量来更改用户 UI 颜色。主要原因:您无法重新编译您的资产,因为每个用户都会交易主题颜色。 我的建议:根据需要实现多少类重新分配 $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>
    

    Obs:如果你使用Rails.configuration,一个用户换UI主题的动作将为所有用户换主题,而不是使用Rails.config把这个选项放在session里面,请参考 current_user 并保留此首选项,或在您的数据库中保护此信息。

    【讨论】:

    • 也许 users 在这里用错了词。这更像是管理员为所有用户设置颜色
    • 即使管理员更改颜色,我认为更好的方法是在数据库中保护此信息并像答案一样更改它
    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多