两种不同的布局,每种布局都有一个样式表

时间:2012-01-01 23:51:55

标签: ruby-on-rails css model-view-controller layout ruby-on-rails-3.1

我有两个不同的布局和两个不同的样式表(每个一个),由一个控制器/动作使用。

如何防止以下错误?

排第5行: app/assets/stylesheets/application.css has already been required

应用程序/视图/布局/ application.html.erb

2: <html>
3: <head>
4:   <title>Blog</title>
5:   <%= stylesheet_link_tag    "application" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8: </head>

加载其他布局时会发生同样的错误,但"application"则为"another_stylesheet_file_in_the_same_folder"

我不明白为什么能够加载 application.css 文件,而第二个布局又有另一条<%= stylesheet_link_tag "another_css_file" %>行。

原因可能是加载这两种样式表的资产管道吗? 或者它只是一个继承问题?

posts_controller.rb

class PostsController < ApplicationController
  layout :choose_layout

  def choose_layout
    current_uri = request.env['PATH_INFO']
    if current_uri.include?('diashow')
      @diashow = true
      return 'diashow'
    else
      @diashow = false
      return 'application'
    end
  end
...

在执行此代码之前,应用程序布局是否已加载?

有没有办法通过before_filter来解决这个问题? 或者我尝试做什么只是愚蠢的? :)

修改

Rails控制台:

Rendered posts/index.html.erb within layouts/application (10.4ms)
Compiled application.css  (2ms)  (pid 23453)
Compiled diashow.css  (1ms)  (pid 23453)
Completed 500 Internal Server Error in 348ms

为什么要加载这两个文件?它应该只加载其中一个。

1 个答案:

答案 0 :(得分:4)

这两个文件都可能包含以下命令:

 = require_tree . 

这会使他们递归地包括在一起。

这些指令被“注释掉”以保持js / css文件的语法正确性。然而,Asset Pipeline将解析这些注释并执行指令。