簡體   English   中英

如何使用Rails控制器的樣式表進行響應?

[英]How to respond with a stylesheet from your Rails controller?

我有一個有限的中間件集的Rails 5.2.0 api應用程序 從應用程序中,我想將CSS文件提供給請求它的瀏覽器。

css文件的內容取決於請求參數,因此我希望能夠從控制器提供文件。 我已經使用腳本成功完成了此操作。 這是我的實現:

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]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM