1

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

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

在控制器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

如您所见,响应具有内容/类型文本/html,因此是 406 错误。

谁能解释一下,如果请求内容类型是 text/css ,为什么控制器响应 text/html ?

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

body {
  background-color: blue; 
}

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

谢谢!

4

1 回答 1

1

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

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

这将请求/get_css.css,因此该操作将使用 format.css 部分处理。

于 2013-06-17T11:32:14.227 回答