动态css - 错误的内容类型

时间:2013-06-17 09:54:10

标签: css ruby-on-rails ruby-on-rails-3 http http-headers

我需要为我的应用中的每个用户添加可自定义的界面。因此,经过一些谷歌搜索后,我决定生成css,为每个用户缓存它并将其链接到视图中。我找到good post并将其用作示例。

所以我的应用程序中有一些结果代码:

在控制器 shedule_themes_controller.rb

...
def get_css
  respond_to do |format|
    format.css { render :text => "body {\n background-color: blue; \n}", :content_type => Mime::CSS }
  end
end

布局

...
<%= stylesheet_link_tag    "application" %>
<link href="<%= get_css_path %>" media="screen" rel="stylesheet" type="text/css" />

但是当我开始申请时,css不会加载。它出现406不可接受的错误。响应标头是:

Cache-Control:no-cache, private
Connection:Keep-Alive
Content-Length:1
Content-Type:text/html; charset=utf-8

如您所见,响应的内容/类型为 text / html ,因此406错误。

任何人都可以解释一下,为什么控制器响应带有text / html,如果请求内容类型是text / css?

P.S。我尝试使用Google Chrome DEV HTTP CLIENT手动向localhost:3000 / get_css发送请求。我设置了Content-Type:text / css,服务器响应了正确的css和content-type:

body {
  background-color: blue; 
}

所以我在布局中链接动态css时可能会犯一些错误?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题似乎在请求的网址中。 <%= get_css_path %>将返回/get_css,因此控制器操作将由format.html部分处理此请求。因此,您可以尝试使用以下网址附加格式:

<link href="<%= get_css_path(:format => :css) %>" media="screen" rel="stylesheet" type="text/css" />

这将请求/get_css.css,因此动作将处理format.css部分。