Railsは、先月かそこらで学んだばかりです。モデルの関連付けの設定について質問があります。私は、戻って、すでに行ったことに変更を加える必要があると思う場所に、ある種の打撃を与えました。これがシナリオです。
今後のイベントを一覧表示するバンド用のアプリケーションを作成しています。
いくつかの重要な要素があります
- イベントを一覧表示する複数のバンドがあります
- 各バンドには独自のイベントがありますが、他のバンドといくつかのイベントを共有します(つまり、このシステムを使用する2つのバンドが同じ会場で一緒に演奏している場合)
- イベントのすべてのバンドに共通する各イベントに関する特定の情報があります(つまり、会場、日付、時刻、都市、州など)
- 1つのバンドに固有の各イベントに関する特定の情報があります(つまり、特定のVIPチケット購入URL、イベントの独自の説明など)。
現在、これはその設定方法です。
class Event < ActiveRecord::Base
belongs_to :venue
scope :upcoming, where('date >= ?', Date.today)
end
class Venue < ActiveRecord::Base
has_many :events
accepts_nested_attributes_for :events
end
イベントをシステムに取り込むことに集中していて、ハードコードされた1人のアーティストについて適切にリストされているため、アーティストモデルについてはまだあまり行っていません。
基本的に現在の仕組みは、ユーザーがイベントフォームの作成に移動し、日付を選択すると、次の行が会場名になります。会場名フォームは、DBの会場名+都市でオートコンプリートされます。ユーザーがすでにシステム内にある会場でイベントを作成している場合、基本的には会場モデルを介してイベント情報をネストされた属性として保存します。会場がシステムにない場合は、位置データの追加の入力フィールドが表示され、新しい会場が作成され、そのイベントに関連付けられます。
アーティストにイベントを共有させ、そのアーティストのみに固有のイベントに関する特定の詳細を維持させるための最良の方法を考え始めると、少し注意が必要になります。すべてのイベントを個別のイベントとして扱うことができ、それは簡単ですが、1つのフィールドに直接名前を入力するアーティストを除いて、このアーティストがこの日にこのアーティストと一緒に演奏しているとどのように言えるかわかりません。また、どのアーティストが他のどのアーティストとどこで演奏したかなど、ActiveRecordsの魔法の多くを失います。
今のところ、イベントのモデルは1つだけですが、会場、都市、州などの複数のバンドで共有されていないイベントの基本だけを1つの中心的なモデルにして、それらをリンクするのが最善かもしれないと考えています。バンド固有の情報のセカンダリevent_detailsモデルに。
複数のモデルを提案しますか、それとも、複数のアーティストが共有する1つのメインイベントにリンクするイベント詳細モデルを作成するよりも、複数のイベントを再生するバンドをリンクするためのより良い方法がありますか?別のバンドが再生しているのと同じイベントとして別のIDのイベントを処理するように、イベントテーブルにある種の一意のイベント識別子を作成する必要がありますか?それで私が見る唯一の問題は、データベースにあるそのデータの多くを倍増することです...私は基本的に、アーティストがプレイしているこの日にOKと言うイベントデータを見ながらできるようにしたいですこのショーは、この会場で、これらの他のバンドと一緒に、バンドが一緒に演奏しているアーティストをリストするだけの「other_artists」列を作成するだけで済みます。
申し訳ありませんが、それが理にかなっていることを願っています...アドバイスを事前に感謝します!