これがグローバル オブジェクトに関する 1001 番目の質問であることはわかっていますが、私の状況は少し異なると思います。
私は、単一の Rails アプリケーション内でいくつかの異なるショップを提供する e コマース ソリューションに取り組んでいます。
ショップ固有のロジックとオプションを提供するクラス Shop があります。例えば:
@shop.tax
モデルでアクセスできる必要があります。税金はショップによって異なる場合があります。例: 9%、18%。
@shop.name
@shop.layout
コントローラーとビューでアクセスできる必要があります。
@shop.email.general
メーラー用。
アプリケーション コントローラーで Shop のインスタンスを作成し、何らかの形でそれをすべてのアプリケーション パーツに渡す必要があります。
# controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :set_shop
protected
def set_shop
requested_shop = if request.domain.match(/^.*shop1\.com$/)
:shop_1
elsif request.domain.match(/^.*shop2\.com$/)
:shop_2
end
@shop = Shop.new(requested_shop)
end
end
リクエストベースのロジックをモデルで使用すべきではないことはわかっていますが、そこにはショップ オプションが本当に必要です。テストでは、この「グローバル」オブジェクトShop.new(:test_shop)
を spec_helper のようにモックできます。
グローバル変数は私の唯一の選択肢ですか? 私はそれらを使用したことがありません。
私は Settingslogic gem を使用しようとしましたが、ショップ固有のオプションの attr_accessors を定義し、それらはリクエスト間で持続します。これは私が必要としているものではありません。