【问题标题】:Two different layouts with one stylesheet for each两种不同的布局,每个布局都有一个样式表
【发布时间】: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 文件能够被加载,而第二个布局却有另一个 &lt;%= stylesheet_link_tag "another_css_file" %&gt; 行。

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

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.cssdiashow.css的内容
  • 有必要吗?他们仍然是一样的。但我无法想象这可能是问题所在。
  • 如果我要更改这些 css 文件之一中的标签名称,那么整个事情将毫无用处。我只是更改了一些标签的内容,但这不可能是解决方案,是的,不是。
  • 我猜这两个文件都包含这个命令:require_tree .。这将使它们相互包含。
  • 啊!好的!我认为require_tree 行在被注释掉时不能做某事。谢谢塞尔吉奥!可惜我不能投票给你。 :(

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


【解决方案1】:

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

 = require_tree . 

这将使它们递归地相互包含。

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

【讨论】:

  • 感谢塞尔吉奥!我认为require_tree 行在被注释掉时不能做任何事情。 ;)
猜你喜欢
  • 1970-01-01
  • 2011-11-10
  • 2020-05-05
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2015-08-05
相关资源
最近更新 更多