【发布时间】:2012-01-01 23:51:55
【问题描述】:
我有两个不同的布局和两个不同的样式表(每个一个)由一个控制器/动作使用。
如何防止出现以下错误?
第 5 行提出: app/assets/stylesheets/application.css has already been required
app/views/layouts/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
为什么要加载这两个文件?它应该只加载其中一个。
【问题讨论】:
-
向我们展示
application.css和diashow.css的内容 -
有必要吗?他们仍然是一样的。但我无法想象这可能是问题所在。
-
如果我要更改这些 css 文件之一中的标签名称,那么整个事情将毫无用处。我只是更改了一些标签的内容,但这不可能是解决方案,是的,不是。
-
我猜这两个文件都包含这个命令:
require_tree .。这将使它们相互包含。 -
啊!好的!我认为
require_tree行在被注释掉时不能做某事。谢谢塞尔吉奥!可惜我不能投票给你。 :(
标签: ruby-on-rails css model-view-controller layout ruby-on-rails-3.1