2

私は次のモデルを持っています

User
Meeting
Participant

Particpant < User
Meeting belongs_to :user
Meeting has_many :participants

次の結合テーブルがあります

create_table 'meetings_participants', :id => false do |t|
  t.column :meeting_id, :integer
  t.column :participant_id   , :integer
end

t.column:confirmed_at、:datetimeを追加して、ユーザーが会議に参加していることをいつ、どのように確認したかを確認できるようにしたいのですが、最善の方法がわかりません。

どうすればconfirmed_atを設定できますか?これは

4

2 に答える 2

4

:confirmed_at :datetime計画は問題ありません。meetings_participants参加テーブルのフィールドとして追加するだけです。

null:confirmed_atを予約して、会議に招待されたが確認されなかったことを意味する場合があります。そして、出席しませんでしたか?出席を確認しなかった会議に誰かが出席できますか?

:idは実際には必要ありませんが、通常は結合テーブルに含めます。IDを持つすべてのテーブルについては多くのレールの仮定があります。

追加した

[:meeting_id、:participant_id]に一意のインデックスを結合テーブルに追加する必要があります。

追加した

Railsアプリでは、ActiveRecordモデルで表される結合テーブルを使用できます。ActiveRecordを満足させるために、テーブルにidフィールドを含めます。例:

class MeetingsParticipant < ActiveRecord::Base
  # join table. Table name: meetings_participants

  belongs_to :meeting
  belongs_to :participant

  # field confirmed_at is nil for invited participants who have
  #                    not yet confirmed attendance

end
于 2012-05-08T02:11:08.240 に答える
1

これを行うには、セットアップしたモデルをよく見て、リファクタリングを少し行うのが最善だと思います。必要なのはにuser関連していmeetingます。このリレーショナルモデルを取得する最良の方法は、別のモデルを導入することだと思います。participantこれは、会議に関連するユーザーです。モデルは次のようになります。

User
  has_many :participants
  has_many :meetings, through: :participants

Participant
  belongs_to :user
  belongs_to :meeting

Meeting
  has_many :participants
  has_many :users, through: :participants
于 2012-05-08T02:11:09.683 に答える