4

Rails 3 アプリケーション用のシンプルなテーマ システムを作成しています。Rails.rootテーマは、 /themesに配置されたフォルダーで構成されます。

  • .yml マニフェスト ファイル
  • いくつかの液体テンプレート ファイル
  • 静的アセットのサブフォルダー

特定のコントローラー/アクションについて、現在のテーマからビューをレンダリングしたいので、それに応じて静的アセットを使用します。

したがって、レールに書き直すように指示する方法が必要です

  • http://example.com/theme1/* ----> #{Rails.root}/themes/theme1/assets/*
  • http://example.com/theme2/* ----> #{Rails.root}/themes/theme2/assets/*
  • ...

現在、テーマごとに異なるエンジンを使用したり、のサブフォルダーにアセットファイルをコピーしたりすることを避けたいため、これを行う方法がわかりませんpublic

どうすればこの問題を解決できますか?

編集:その他の要件

私は、Rails のデフォルトを混乱させないものを探していました。これにより、後で新しいアセット パイプライン機能 (Rails 3.1 用に計画されています) を利用することができます。

現在、私はこれだけを見つけました:

config.asset_path = proc { |asset_path| "assets/#{asset_path}" } 

残念ながら、アセット パイプラインが有効になっている場合は適用されません。

4

1 に答える 1

0

themes_for_railsプラグインを見てください。

次の readme からの抜粋は、必要なロジックに基づいて使用するテーマを変更する方法を示しています。

コントローラーのアクション:

class MyController < ApplicationController
  def show
    theme "purple"
  end
end

コントローラーのクラス レベルで:

class MyController < ApplicationController
  theme "purple" # all actions will use this theme
  def show
    ...
  end
end 

または、「リゾルバー」ラムダ/関数を使用します。

class MyController < ApplicationController
  theme :theme_resolver
  # ...
private
  def theme_resolver
    current_user.theme # or anything else that return a string. 
  end
end

ビューとメーラー用のヘルパー関数もあります。

于 2011-07-05T06:59:41.090 に答える