css - 如何使用来自 Rails Controller 的样式表进行响应?

标签 css ruby-on-rails controller

我有一个 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/

相关文章:

ruby-on-rails - Google Omniauth - 哈希的未定义方法字节大小

ruby-on-rails - Rails4 : How to use HTTP instead of HTTPS (SSL) in production

mysql - 处理大型数据库表的策略

c# - 当 RedirectToAction 调用 View 时,mvc4 模型为 null

javascript - 显示隐藏的跨度元素Javascript

javascript - "line-height"样式可以安全使用吗?

testing - Laravel 测试错误

java - 基础 Controller SpringMVC

html - 扩展单元格以匹配行中其他单元格的高度

javascript - 如何检查列表的第一个 child 有 `selected` 类