1

我是 Rails 的新手,我希望这是一个简单的问题,但我无法在这里或通过谷歌搜索找到它。我经历过几个 不同的 类似 帖子,但从未完全解决我的问题。(“帖子”上的第四个链接是完全相同的问题,但从未解决或回答。)

我正在尝试设置一个非常简单的博客应用程序来玩。我想做的(现在)就是建立一个全局 application.css[.scss is optional] 和一个特定于页面的 post.css[.scss]。

我的 application.css 看起来像这样:

//= require_self
//= require_tree .

body {
    background-color: #CCF;
}
#main_content_div {
    width:90%; 
    padding:10px; 
    margin: 15px auto; 
    background-color:#FFF;
}

如果你问我,这很简单。

我的 post.css.scss 看起来像这样:

.postlist_row {
    border: 1px solid red;
}

没有什么花哨。

但是当我尝试访问 /posts 时,我最终得到:

Sprockets::CircularDependencyError in Posts#index

对此的标准 SO 答案似乎是“好吧,只需删除该 require_tree 语句。您正在使用 Rails 3 和 Sprockets,因此这已经发生了,并且您将双重包含相同的文件。”

这可能是真的。如果我删除了 require_tree,application.css 就可以正常工作。但是,这就是我的问题似乎与其他问题不同的地方,它从不包括 post.css.scss。其中没有任何规则应用于页面,也没有显示在源代码中。

我对管道的了解还不够,无法确定问题出在哪里,无论是因为我的陈述顺序还是因为一个是 css 而另一个是 scss 或我的配置......我只是没有主意。

有什么想法吗?

4

1 回答 1

1

如果您删除了,//= require_tree .那么您将需要自己包含控制器特定的资产。

请参阅http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline

例如,如果你生成一个 ProjectsController,Rails 也会在app/assets/javascripts/projects.js.coffee和 中 添加一个新文件app/assets/stylesheets/projects.css.scss。您应该将控制器特有的任何 JavaScript 或 CSS 放在它们各自的资产文件中,因为这些文件可以仅针对这些控制器加载,例如<%= javascript_include_tag params[:controller] %><%= stylesheet_link_tag params[:controller] %>.

你这样做了吗?

或者,您可能想要离开,//= require_tree .以便您的应用程序可以为所有请求提供单个样式表(浏览器可以在第一页之后缓存)并使用选择器将某些样式限制为特定页面。例如,您可以params[:controller]在应用程序的布局模板中将类添加为页面主体,以便您可以将样式范围限定为仅应用于该控制器的视图:

body.posts {
  .postlist_row {
    border: 1px solid red;
  }
}
于 2012-11-23T19:27:06.390 回答