资产管道:提供资源特定的scss文件

时间:2011-10-30 20:18:10

标签: ruby-on-rails ruby-on-rails-3.1 asset-pipeline sass

我们有3种可能的选择:

  • 用户未登录
  • 用户已登录
  • 用户以管理员身份登录

由于我们的用户区域非常重(就css而言),我想让未登录的人员加载代码。

是否可以将我的css.scss更改为css.scss.erb&然后添加一些助手?例如:

Application.css.scss.erb

  # include css files for non-logged in users
  <% if signed_in? %>
    # include css files for logged in users
    <% if current_user.try(:staff_role?) %>
      # include css files for admin users
    <% end %>
  <% end %>

这样,我就阻止为用户添加第二个或第三个http请求。有效?

这会如何影响渲染时间? rails会缓存3个不同的文件吗?

1 个答案:

答案 0 :(得分:1)

我认为这不会很好。您的所有资产都将在生产中进行预编译,因此您的ERB将无法执行您期望的操作。资产中的任何ERB都只需要是“环境级别”,我指的是路径,而不依赖于当前请求的状态。您可以使用多个样式表:

  • 涵盖所有常见内容的内容。
  • 包含登录用户内容的内容(但内容不能取决于登录的用户)。
  • 一个用于管理员用户(但同样,内容不能取决于登录的用户)。

然后在视图中包含相应的样式表。

如果出于某种原因需要每用户CSS,则必须在视图中使用<style>元素并将其内联或通过控制器提供CSS,以便您可以在每个用户上自定义它请求基础。