各テーマに非常に少数の CSS オーバーライドを使用して、Rails 3.2 アプリのカスタム テーマの問題を実装しています。
current_theme
これまでのところ、いくつかの CSS (時折の Erb パラメーターを含む) をレイアウト ファイル内にインライン化することでテーマのバリエーションを実装しましたが、GET 要求を介してカスタマイズ CSS を配信することでこれを整理したいと思います。
<%= stylesheet_link_tag theme_path(current_theme, format: :css) %>
私のthemes_controller.rbで:
class ThemesController < ApplicationController
respond_to :css
...
def show
@theme = Theme.find(params[:id])
respond_with @theme
end
end
に必要なshow.css.erb
ファイルがありますviews/themes
。
私の主な問題は/themes/1?format=css
、CSS ファイルを正しく読み込んでレンダリングすることです。ただし、ヘルパー/themes/1.css
によって生成される URL の形式では、404 が生成されます。theme_path
ここで非常に単純なことを見落としている可能性があります。うまくいけば、仲間の SO ユーザーが、私の頭とレンガの壁がよりよく知られるのを防ぐために、ブルーミングの明白な点を指摘してくれることを願っています...
更新: Rails ルート認識デバッグのボットを実行:
r = Rails.application.routes
#=> #<ActionDispatch::Routing::RouteSet:0x007fc385016170>
r.recognize_path '/themes/1.css'
#=> {:action=>"show", :controller=>"themes", :id=>"1", :format=>"css"}
r.recognize_path '/themes/1?format=css'
#=> {:action=>"show", :controller=>"themes", :id=>"1"}
したがって、実際に機能している?format=css
ように見えるのは、少なくともコマンドラインから CURL を実行すると/themes/1
、必要な CSS が返されるためです。私に関する限り、それはニシンです...
ちなみに、この行を作品に追加するroutes.rb
:
get '/themestyle/:id' => 'themes#show', as: 'themestyle', format: 'css'
resources :themes
( routes.rbと競合しないように、少し異なるルートを使用します)。themestyle_path(current_theme)
実行可能なルートを生成します – /themestyle/1
– 問題なくレンダリング段階で「text/css」タイプのヘッダーを追加できます。<link rel="stylesheet">
stylesheet_link_tag は css サフィックスを追加するので、要素を手作業でコーディングする必要があります。