1

(Ruby / Railsの第一人者が望ましい:P)

興味深い質問が少しあります。それがまだ答えられていないことを願っています(待ってください、はい、そうです!)が、私はそれを調べましたが、見つけることができませんでした。(うまくいけば、それが不可能だからではありません)

グループとイベントの2つのクラスがあります(そのように維持したいと思います)(以下を参照)。

class Group < ActiveRecord::Base
    has_and_belongs_to_many :events
end

ただし、結合テーブル(group_events)には、イベントに酌量すべき状況を提供する追加の列があります...この情報をイベントオブジェクトで利用できるようにしたいです。(例えば、出席が義務付けられているかどうかなど)

私の2番目の少し関連した質問は、私は次のことを行うことができないということです:

class Event < ActiveRecord::Base
    has_and_belongs_to_many :groups
end

class GroupEvent < Event
    # Implies that a GroupEvent would be an Event, with all the other attributes of the group_events table minus the
    # two id's (group_id, event_id) that allowed for its existence (those would just be references to the group and event object)
end
4

1 に答える 1

3

まず、とhas_and_belongs_to_manyの関係を明示的に記述して、を書き直します。EventGroupEvent

class Group < ActiveRecord::Base
  has_many :group_events
  has_many :events, :through => :group_events
end

class Event < ActiveRecord::Base
  has_many :group_events
  has_many :groups, :through => :group_events
end

class GroupEvent < ActiveRecord::Base
  belongs_to :group
  belongs_to :event
end

次に、クラス内のメソッドEventを使用して、後のGroupEvent属性を参照できます。のいくつかのブール:attendance_mandatory属性についてはGroupEvent、次のようなことを行うことができます

class Event < ActiveRecord::Base
  has_many :group_events
  has_many :groups, :through => :group_events

  def attendance_mandatory?(group)
    group_events.find(group.id).attendance_mandatory?
  end
end

いくつかのEventaseとassociatedasGroupを使用するとg、次のことが可能になります。

e.attentdance_mandatory?(g)

2番目の質問については、上記の最初のコードブロックに投稿したものの一部を探していると思います。

class GroupEvent < ActiveRecord::Base
  belongs_to :group
  belongs_to :event
end

対話するデータを含むすべてのテーブルには、アプリケーションに代表的なモデルが含まれている必要があります。上記はあなたが述べた基準を満たしています(の属性を公開していますGroupEvent

注:の構文は単一テーブル継承class GroupEvent < Eventに使用されます(属性をテーブルに移動し、そのテーブルを通常と-の両方に使用しますが、これはこの質問の範囲外です) attendance_mandatoryeventseventsEventGroupEvent

于 2012-07-08T23:35:08.163 に答える