我需要为我的应用程序中的每个用户添加可自定义的界面。所以在谷歌搜索之后我决定生成 css,为每个用户缓存它并在 View 中链接它。我找到了 good post并以此为例。
所以我的应用程序产生了一些结果代码:
在 Controller 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 Not Acceptable 错误。响应 header 是:
Cache-Control:no-cache, private
Connection:Keep-Alive
Content-Length:1
Content-Type:text/html; charset=utf-8
如您所见,响应具有内容/类型text/html,因此 406 错误是。
谁能解释一下,如果请求内容类型是 text/css,为什么 Controller 会用 text/html 响应?
附言我尝试使用 Google Chrome DEV HTTP CLIENT 手动向 localhost:3000/get_css 发送请求。我设置了 Content-Type: text/css 并且服务器响应了正确的 css 和 content-type:
body {
background-color: blue;
}
所以我可能在布局中链接动态 CSS 时犯了一些错误?
谢谢!
请您参考如下方法:
问题似乎出在请求的 url 中。 <%= get_css_path %>
将返回 /get_css
因此 Controller 操作通过 format.html
处理此请求部分。所以你可以尝试将格式附加到 url 中:
<link href="<%= get_css_path(:format => :css) %>" media="screen" rel="stylesheet" type="text/css" />
这将请求 /get_css.css
因此该操作将处理 format.css 部分。