我可以在同一个应用程序中使用CSS资源和公共文件夹吗?

时间:2012-11-02 11:06:36

标签: css ruby-on-rails ruby-on-rails-3

我有一个遗留应用程序,我想迁移到使用Rails 3资产管道。我有超过100个样式表,使用

按模板导入模板
content_for :stylesheets

块。

将它们全部编译到一个样式表中当前并不是一个观众,因为编写的代码只是为了期望某些页面上的某些样式表,因此例如登录页面会导入一个重定义文章形式的样式表。在所有页面上重新定义它并不好。

有没有办法慢慢迁移到应用程序首先查找已编译资产的资产管道,然后将其故障转移到 public / stylesheets 目录?

1 个答案:

答案 0 :(得分:1)

如果你想“正确”这样做,那么不需要花费大量精力的事情就是在<html><body>标签上加上一个类名并包装内容你的CSS文件与选择器。例如,我在ApplicationController中使用了与以下类似的内容。

before_filter :body_class

def body_class
  controller_name = self.class.name.gsub(/Controller$/, '')
  if !controller_name.index('::').nil?
    namespace, controller_name = controller_name.split('::')
  end

  @body_classes = ["#{controller_name.underscore}_#{action_name} ".downcase.strip]
  @body_classes = ["#{namespace.underscore}_#{@default_body_classes.join}".strip] if !namespace.nil?
end

然后,在我的布局中,我有类似的东西

<body class="<%= @default_body_classes.join(' ') %>">

接下来,您可以将所有样式表的扩展名更改为.css.scss。将它们全部放在新的app/assets/stylesheets目录中。要快速包含它们(尽管可能无序),请添加

/*
 * =require_tree .
 */

到新app/assets/application.css.scss文件的顶部。只需在布局中包含这个application.css文件即可。

<%= stylesheet_link_tag "application", :media => 'screen' %>

最后,花一些时间浏览样式表,用适当的body类包装每个文档的整体。例如,如果您有一个特定于某个User::Admin控制器的signup操作的样式表,那么您将使用

包装整个样式表。
.user_admin.signup {
  /* Your stylesheet's content here */
}

Sass将使用.user_admin.signup类正确填充所有嵌套内容,该类会在呈现该动作时附加到您的<body>标记。

我意识到这不是一个真正的中间修复,因为你正在寻找,但是按照与此类似的步骤,你应该能够在没有太多努力的情况下获得95%的方式,并且它将会“完成” ”