0

私はレールを使い始めたばかりで、小さな問題に遭遇しました。私が実装しようとしているのは、ユーザーがウィジェットを追加できる「ページ」を作成できるようにする方法です。

そのため、名前、説明などのデータベースフィールドを持つ「ページ」のモデルをセットアップしました。また、「has_many :widgets」関連付けもあります。

ここで私は困惑しています。ユーザーが使用できるウィジェットのリストがあります。「私について」、「フォト ギャラリー」、「コメント」、「ビデオ」など。これらのいずれかを選択し、コンテンツをカスタマイズしてページに追加できます。

ユーザーがウィジェットを選択してカスタマイズすると、「belongs_to user_id」でウィジェットテーブルにエントリが追加されます。ただし、ユーザーが選択したウィジェットと入力したカスタム コンテンツを指定する必要があります。

Railsでこれを実装するにはどうすればよいですか? 各ウィジェット タイプはどこで定義できますか?

いくつかの方法を考えることができますが、どれが最適かはわかりません。

  • 1 つのオプションは、ウィジェットごとにモデルを使用することです。AboutMeWidget、VideosWidget などがあります。これにより、ウィジェットに必要なフィールドを使用して各モデルをカスタマイズできます。ただし、これは効率的ではないようで、必要なモデルが多すぎます。
  • もう 1 つのオプションは、ウィジェット タイプをどこか (しかしどこで?) に定義してから、ウィジェット テーブルの「widget_type」を単純化することです。(したがって、テーブルには「belongs_to :user」と「has_one :widget_type」が含まれます。) また、ユーザーが入力したデータ用のフィールドも必要になります (おそらく XML を介して?)。
  • 最後に考えられるオプションは、Ruby クラスを使用してウィジェットを定義することです。ユーザーがウィジェットをカスタマイズしたら、ウィジェットのクラスからオブジェクトを作成し、そのオブジェクトを保存します。

他に良い方法はありますか?

4

1 に答える 1

1

特定のウィジェット実装の特定のフィールドを検索可能にする必要がない場合、それらをシリアル化されたフィールドに入れたいと思うでしょう。

class Page << AR
  has_many :embedded_widgets
  has_many :widgets, :through => :embedded_widgets
end

class Widget << AR
  has_many :embedded_widgets
end

class AboutMeWidget << Widget
class VideosWidget << Widget
... etc ...

class EmbeddedWidget << AR
  belongs_to :page
  belongs_to :widget
  serializes :data
end
于 2013-07-23T21:30:07.453 に答える