我有以下型号
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?因为这是
答案 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