0

同じ会社の子会社のために複数の言語で Web サイトを処理する Web アプリケーションであるプロジェクトを数週間以内に開始します。フロントエンドの外観は異なる場合がありますが、それらはすべてその下にある同じモデル設計にサブスクライブしています。

ただし、主な要件の 1 つは、各子会社がモデルのどのフィールドを Web サイトに表示するかを選択できることです。

例:Programモデルがいます

class Program < AR
  attr_accessible :starting_at, :ending_at, :name, :price, :country
end

したがって、この会社の 2 つの子会社、つまり米国とスウェーデンがある場合、どちらも同じモデルを使用してプログラムを提示します。しかし、米国支店は、すべてのプログラムを含む表を表示したいと考えており、各プログラムについて、、、および のみをstarting_at表示しending_atます。スウェーデン支部も同じことをしたいのですが、表示したくありません。namepriceending_atcountry

さらに、時間の経過とともに変化する可能性があるため、Web インターフェイスを介して表示されるフィールドを選択できるようにしたいと考えています。

MetaProgramそこで私の考えは、多くのメタ モデリングが行われているため、どの子会社のどのフィールドにどのフィールドを表示するかなどの情報を保持するモデルを考え出すことでしActiveRecordた。どのフィールドを選択する必要があるかを常に選択する必要があるため、実際のデータを選択してフロントエンドで表示します...

これに対するより良い解決策、またはこの種のものを踏む宝石はありますか?

PS: あいまいなタイトルで申し訳ありません

4

1 に答える 1

3

これがまさにあなたが探しているものかどうかはわかりません。

これにはActiveRecord::Storeを使用します。モデルのキー/値ストレージのようなものです。

次のようなテーブルがあります。

create_table do |t|
  t.text :metadata # just a text column, will store serialized hash
end

そして、このようなモデル:

class Program < ActiveRecord::Base     
  store :metadata, :accessors => [:starting_at, :ending_at]

  # validate like normal fields
  validates :starting_at, :presence => true
end

質問で述べた条件に基づいて、ストア アクセサー ハッシュを動的に追加する方法を見つける必要があります。

保存されたメタデータにインデックスを付けることができず、クエリでそれらを使用できないという欠点があるかもしれません。

このトピックに関する素敵な小さなチュートリアルと説明を見つけましたhere .

于 2013-08-01T21:15:48.600 に答える