在Ruby on Rails中向集合添加新项后,如何重新编译我的application.css.scss.erb资产



我正在开发一个rails应用程序,该应用程序允许管理员用户动态地向集合添加颜色,然后通过引用颜色和css类将这些颜色应用于帖子。

在我的应用程序.css.scss.erb文件中,我有以下代码:

<% Color.all.each do |color| %>
.theme-<%= color.name %>{
color: <%= color.text_color %>;
background: <%= color.hex_code %>;
border-top-color: <%= color.hex_code %>;
}
<% end %>

正如你所看到的,我正在浏览colors集合中的所有颜色,并为每个颜色创建一个特定的css类,以应用于我的帖子视图中。

每个帖子都引用了Colors集合中的一种颜色,因此在我的帖子视图中,我应用了这样的类:

<div id="post-header" class="theme-<%= @post.color.name %>">
<h1><%= @post.title %></h1>
<%= link_to image_tag('post_header_image.png'), post_path(@post) %>
</div>

我希望管理员用户可以通过窗体动态地将新颜色添加到Colors集合中,然后自动编译application.css.scss.erb文件,这样就可以立即应用任何新的颜色类,而无需手动刷新或更新application.css.secss.rb文件。

问题是,当我动态地向颜色集合添加新颜色时,我的application.css.scss.erb文件不会重新编译,因此不会创建新的颜色类,因此实际的颜色样式不会显示在我的post视图中。

在将新颜色添加到Colors集合后,是否有任何方法可以强制rails重新编译我的application.css.scss.erb文件?

否则,有没有更好的方法来处理Rails中的动态样式和类?

这只是一个简单的解决方案,如果您只想更改此div的颜色,请使用样式标记?

<div id="post-header" style="<%= @post.color.name.present? ? "color: #{@post.color.name};" : "" %>">
...
</div>

如果您不使用标准颜色,您可以将十六进制代码作为另一列存储在数据库中,然后在颜色变量之前有一个额外的#。

最新更新