我需要为我的应用中的每个用户添加可自定义的界面。因此,经过一些谷歌搜索后,我决定生成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时可能会犯一些错误?
谢谢!
答案 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部分。