0

Railsの新機能は、先月学んだばかりです。モデル関連の設定に関する質問があります。私は、私が戻って、私がすでにやったことに変更を加える必要があると思う場所にヒットします。ここにシナリオがあります。Railsアソシエーションのオプション

今後の予定をリストするためのバンドのアプリケーションを作成しています。

は、いくつかの重要な要因があります

  • ユニークなイベントがありますが、また他のバンド(すなわち二つのバンド、これを使用してのいくつかといくつかのイベントを共有するイベントに
  • 各バンドをリストアップし、複数のバンドがあります。システムは同じ会場で一緒に演奏されています)
  • イベントのすべてのバンド(場所、日付、時刻、市、州など)に共通する特定の情報があります
  • 各イベントは仕様です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 

は、私は本当に私としてはまだ、アーティストモデルとあまり行っていません

本質的に今のところ、ユーザーはイベントフォームの作成に行き、日付と次のものを選択します行は会場名です。会場名フォームは、DBからの会場名+都市で自動完成します。ユーザーが既にシステム内の会場にイベントを作成している場合は、Venueモデルを介してイベント情報をネストされた属性として保存します。会場がシステム内にない場合、位置データの追加入力フィールドが表示され、新しい会場が作成され、そのイベントに関連付けられます。

アーティストがイベントを共有し、そのアーティストだけに固有のイベントについて特定の詳細を維持するための最良の方法について考え始めると少し難解になります。私はすべてのイベントを個別のイベントとして扱うことはできますが、それは簡単ですが、この芸術家がこれらの名前を1つのフィールドに直接入力する以外にどのようにこのアーティストが演奏していると言えるでしょうか。私はまた、どのアーティストが他のアーティストとどこで演奏したかなど、ActiveRecordsの魔法をたくさん失う。

今のところイベント用のモデルは1つしかないが、都市、州などの複数のバンドで共有されていないイベントの基本情報のみを1つの中央モデルに保存し、それらをバンド固有の情報のセカンダリevent_detailsモデルにリンクします。

複数のアーティストが共有する1つのメインイベントにリンクするイベント詳細モデルを作成するよりも、複数のモデルを提案したり、複数のイベントを一緒に再生するバンドをリンクする方がいいですか?イベントテーブルに一意のイベント識別子を作成して、別のバンドが再生している同じイベントと異なるIDでイベントを処理する必要がありますか?唯一の問題は、それが私のデータベースにある多くのデータを倍増させることになるということです。私は、イベントデータを見て、アーティストが演奏しているこの日このショーでは、この会場で、他のバンドと一緒に、バンドが単に演奏しているアーティストをリストする「other_artists」コラムを作るだけで簡単にできます。

申し訳ありませんが、私はそれが理にかなっていることを願っています...アドバイスを事前に感謝!

答えて

0

あなたの本当の問題は、アーティストとイベントの多対多の関係を処理する必要があることです。イベントには多くのアーティストが予約され、アーティストにはスケジュール通りに多くのイベントが開催されます。

私は、特に1つのアーティストを1つのイベントに結びつける「予約」クラスを作成します。この予約は、そのイベントで遊んでいるアーティストの特別な必要条件や特別な手配をするのに適しています。 ActiveRecordの "has_many:through"関係を使用することで、これは非常に簡単になり、データのクエリ方法に柔軟性をもたらします。ここで私はそれを行うだろうかです:

class Event < ActiveRecord::Base  
    belongs_to :venue 
    has_many :artists, :through => :bookings 
    scope :upcoming, where('date >= ?', Date.today) 
end 

class Venue < ActiveRecord::Base 
    has_many :events 
    accepts_nested_attributes_for :events 
end 

class Artist < ActiveRecord::Base 
    has_many :events, :through => :bookings 
end 

class Booking < ActiveRecord::Base 
    belongs_to :artist 
    belongs_to :event 
    attr_accessible :special_requirements, :special_arrangements 
end 

いくつかの例では、これらの関係を介してデータを照会してもらう柔軟性:

@venue.events 
@venue.events.where(:id => specific_event.id).first.artists 
@event.artists 
@artist.events 
@event.bookings each do |b| 
    b.artist 
    b.special_requirements 
end 

・ホープ、このことができます。

+0

はい、あなたは正しいと思います。助けてくれてありがとう。 – brent

+0

予約モデルをどのように更新しますか? Venueからネストされた属性を受け入れ、通常のイベントモデルを更新するのと同じ方法で更新しますか? – brent

+0

私はイベントを通じて予約を管理します。イベントコントローラーには、関連付けられたビューとともに「new_booking」アクションと「update_booking」アクションがあります。 Event#showビューでは、new_bookingアクションへの「新しい予約」リンクを提供することができます。 new_bookingアクションでは、イベント予約の関係を「@booking = @ event.booking.new」に設定します。関連するビューでは、ユーザーがアーティストを選択し、特別な要件/手配を入力することができます。イベントは、予約のネストされた属性を受け入れる必要があります。 –

関連する問題