gpt4 book ai didi

ruby-on-rails - Rails 线程化私有(private)消息传递

转载 作者:行者123 更新时间:2023-12-04 05:30:56 25 4
gpt4 key购买 nike

我有以下两个模型:

class Message < ActiveRecord::Base
belongs_to :to_user, :class_name => 'User'
belongs_to :from_user, :class_name => 'User'

has_ancestry #Using the 'ancestry' gem
end

class User < ActiveRecord::Base
has_many :messages_received, :class_name => 'Message', :foreign_key => 'to_user_id'
has_many :messages_sent, :class_name => 'Message', :foreign_key => 'from_user_id'
end

每个用户都可以与另一个用户进行一次对话,并且所有回复都应该来自原始消息。

在我的“索引” Controller 操作中,如何查询发送的消息和接收的消息?例如,如果 User1 点击“/users/2/messages/”,他们应该会看到 user1 和 user2 之间的整个对话(无论谁发送了第一条消息)。我是否需要添加一个“线程”模型,或者有没有办法用我当前的结构来完成这个?

谢谢。

最佳答案

您最好将其重组为可以加入人们的对话,而不是链中的一系列相互关联的消息。例如:

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是其中之一,因此您不能拥有具有该名称的模型。

关于ruby-on-rails - Rails 线程化私有(private)消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com