Rails连接表

时间:2012-05-08 01:57:44

标签: ruby-on-rails activerecord

我有以下型号

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?因为这是

2 个答案:

答案 0 :(得分:4)

您的计划没有问题:只需将:confirmed_at :datetime作为字段添加到meetings_participants联接表中。

您可能希望保留null:confirmed_at表示他们被邀请参加会议但从未确认过。并没有参加?有人可以参加他们没有确认参加会议的会议吗?

我通常在连接表中包含:id,即使它并不是真的需要。有关id的所有表都有很多轨道假设。

<强>加入

您应该在[: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

答案 1 :(得分: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