0

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

如何防止以下错误?

线#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

向我们展示'application.css'和'diashow.css'的内容 – 2012-01-01 23:55:53

+0

是否有必要?他们仍然是相同的。但我无法想象这可能是问题所在。 – Marc 2012-01-02 00:00:36

+0

这可能有帮助。 – 2012-01-02 00:03:24

回答

4

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

= require_tree . 

这将使他们递归包括对方。

这些指令被“注释掉”以维护js/css文件的语法正确性。 Asset Pipeline仍然会解析这些注释并执行指令。

+0

谢谢塞尔吉奥!我认为'require_tree'行在被注释掉时不能做某件事。 ;) – Marc 2012-01-02 00:43:33

相关问题