我有一个 Rails 5.2.0 api app使用一组有限的中间件。我想从应用程序向请求它的浏览器提供一个 css 文件。
css 文件的内容取决于请求参数,因此我希望能够从 Controller 提供该文件。我已经用脚本成功地做到了这一点。这是我的实现:
Rails.application.routes.draw do
get "assets/script" => "assets#script"
get "assets/stylesheet" => "assets#stylesheet", :format => :css
end
class AssetsController < ApplicationController
## This action works
def script
js = ActionController::Base.render(
"assets/script", assigns: {foo: params[:foo]}
)
render :js => js
end
## This action doesn't work
def stylesheet
css = ActionController::Base.render(
"assets/stylesheet", assigns: {foo: params[:foo]}
)
render :plain => css
end
end
当浏览器请求脚本时,它在浏览器中可用:
<script>$.getScript("https://example.com/assets/script");</script>
但是我的样式表不是这种情况:
$('<link/>', {
rel: 'stylesheet',
href: "https://example.com/assets/stylesheet.css"
}).appendTo('head');
样式表返回并添加到浏览器中,但未投入使用。我可以从常规 Rails 应用程序的 /public
文件夹中提供完全相同的内容,并且可以使用它。
我一定是遗漏了什么,也许是一些响应头。知道我错过了什么吗?
最佳答案
浏览器期望 css 提供相应的内容类型:
render body: css, content_type: 'text/css'
Rails 对此有默认的 mime 类型:render css: css
也可以一步渲染:
render template: "assets/stylesheet", formats: [:css], assigns: {foo: params[:foo]}
关于css - 如何使用来自 Rails Controller 的样式表进行响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55043336/