Возможно, вам лучше реструктурировать это как беседу, к которой вы можете присоединиться к людям, чем серию взаимосвязанных сообщений в цепочке.Например:
class Conversation < ActiveRecord::Base
has_many :messages
has_many :participants
has_many :users, :through => :participants
end
class Message < ActiveRecord::Base
belongs_to :conversation
end
class Participant < ActiveRecord::Base
belongs_to :conversation
belongs_to :user
end
class User < ActiveRecord::Base
has_many :conversations
has_many :participants
end
Когда кому-то отправляется сообщение, создайте для него беседу и пригласите соответствующих сторон, добавив их в список users
.
Потоковый обмен сообщениями может бытьдобавлено здесь путем встраивания родительских отношений в само Сообщение или использования предков, хотя на практике это имеет тенденцию быть чрезмерным, поскольку для большинства людей обычно достаточно простого хронологического упорядочения ответов.
Для отслеживания статуса чтения / непрочитанноговам понадобится таблица связи между пользователем и сообщениями напрямую, и это может быть сложно, поэтому избегайте ее, если она вам не нужна.
Имейте в виду, что некоторые имена зарезервированы либо Ruby, либо Rails, и Thread
является одним из них, поэтому вы не можете иметь модель с таким именем.