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在 meeting_participants 连接表中添加一个字段即可。

您可能希望保留一个空 :confirmed_at 以表示他们被邀请参加会议但从未确认。而且没有参加?有人可以参加他们未确认出席的会议吗?

我通常将 :id 包含在连接表中,即使它并不是真正需要的。关于所有具有 id 的表有很多 rails 假设。

添加

您应该将 [:meeting_id, :participant_id] 上的唯一索引添加到您的联接表中。

添加

您当然可以在 Rails 应用程序中拥有由 ActiveRecord 模型表示的连接表。在表中包含一个 id 字段以保持 ActiveRecord 满意。例子:

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

为此,我认为最好仔细查看您设置的模型并进行一些重构。您想要的是与 auser相关的 a 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 回答