1

複数のドメイン名を持つ Ruby on Rails Web サイトを運営しています。各ドメイン名に関連する構成値を格納するデータベースに「Web サイト」テーブルがあります。

ウェブサイト
- ドメイン
- 名前
- キャッチフレーズ
- admin_email
- など...

現時点では、ApplicationController の各リクエスト (before_filter) の開始時に Web サイト オブジェクトをロードします。

@website = Website.find_by_domain(request.host)

問題は、モデルのメソッドから @website オブジェクトにアクセスする必要がある場合です。どこでも @website を渡す必要は避けたいと思います。最善の解決策は、APP_CONFIG に似たものをドメイン名ごとに設定することです。

def sample_model_property
- - "#{@website.name} は素晴らしいウェブサイトです!"
終わり

どのようにしますか?

4

1 に答える 1

0

これがコントローラーのインスタンス変数である場合は、コントローラー ドメインとビュー ドメインの両方で必要なすべての場所で @website にアクセスできる必要があります。同じ容量で何かをモデル空間にプッシュする必要がある場合は、それを渡すか、model_helperメソッドなどを介してハックする必要があります。

代わりに、Web サイト クラスで一種のシングルトン メソッドを使用することもできます。たとえば、次のようになります。

class Website < ActiveRecord::Base
  cattr_accessor :current_website
end

次に、コントローラーで次のようなことができます。

before_filter :load_current_website

def load_current_website
  Website.current_website = Website.find_by_domain(request.host)
end

そうすれば、モデル空間内の任意の場所で Website.current_website を参照でき、物事が同期するはずです。これは完全にスレッドセーフではない可能性があるため、使用する前に本番環境のような環境で広範囲にテストする必要があることに注意してください。

于 2010-06-01T14:17:08.030 に答える