Chat belongs_to User 和 User has_many 的两个实例:聊天(ruby 在 rails 上)
Chat belongs_to two instances of User, and User has_many :chats (ruby on rails )
我正在构建一种“非即时消息系统”。我的系统由许多用户、聊天和消息组成。
- 用户可以有很多聊天
- 聊天只能属于两个不同的用户
- 消息属于一个用户和一个聊天
我设计的方式是:
rails g model Chat user1:references user2:references
rails g model Message user:references chat:references
然后在我的 models/chat.rb 中:
# models/chat.rb
class Chat < ApplicationRecord
belongs_to :user1, :class_name => 'User'
belongs_to :user2, :class_name => 'User'
end
我的models/message.rb模型
# models/message.rb
belongs_to :user
belongs_to :chat
还有我的 models/user.rb 模型
# models/user.rb
has_many :chats
has_many :messages, through: :chats
所有这些建模对我来说都很有意义,但我就是无法让它发挥作用。我需要能够执行 User.find(1).chats
之类的操作,并拥有 return 所有用户的聊天记录。 Chat.find(1).users
也不错。 User.find(1).messages 并没有那么麻烦,因为它是非常标准的关系,但是其他关系呢?我错过了什么?我已经通过论坛阅读了论坛,但我似乎无法找到任何解决方案来处理我的具体案例。
我会建议这些更改(在@TonyArra 的协助下):
- 聊天
have_many
条消息
- 留言
belongs_to
聊天
- 聊天
have_and_belongs_to_many
(或belongs_to
)用户
- 用户
have_and_belongs_to_many
(或have_many
)聊天
这将是对此进行建模的传统方式,我认为它会支持您的用例。
我在评论中提到了 YAGNI,因为 OP 提到聊天只有两个用户。 YAGNI(你不会需要它,所以现在不要构建它)是一个很好的原则。然而,许多聊天程序支持两个以上的用户,有时只支持一个用户。您可能会争辩说,考虑到这一点来构建数据模型是务实的。
关于该主题的进一步阅读:Preemptive Pluralization is (Probably) Not Evil
我正在构建一种“非即时消息系统”。我的系统由许多用户、聊天和消息组成。
- 用户可以有很多聊天
- 聊天只能属于两个不同的用户
- 消息属于一个用户和一个聊天
我设计的方式是:
rails g model Chat user1:references user2:references
rails g model Message user:references chat:references
然后在我的 models/chat.rb 中:
# models/chat.rb
class Chat < ApplicationRecord
belongs_to :user1, :class_name => 'User'
belongs_to :user2, :class_name => 'User'
end
我的models/message.rb模型
# models/message.rb
belongs_to :user
belongs_to :chat
还有我的 models/user.rb 模型
# models/user.rb
has_many :chats
has_many :messages, through: :chats
所有这些建模对我来说都很有意义,但我就是无法让它发挥作用。我需要能够执行 User.find(1).chats
之类的操作,并拥有 return 所有用户的聊天记录。 Chat.find(1).users
也不错。 User.find(1).messages 并没有那么麻烦,因为它是非常标准的关系,但是其他关系呢?我错过了什么?我已经通过论坛阅读了论坛,但我似乎无法找到任何解决方案来处理我的具体案例。
我会建议这些更改(在@TonyArra 的协助下):
- 聊天
have_many
条消息 - 留言
belongs_to
聊天 - 聊天
have_and_belongs_to_many
(或belongs_to
)用户 - 用户
have_and_belongs_to_many
(或have_many
)聊天
这将是对此进行建模的传统方式,我认为它会支持您的用例。
我在评论中提到了 YAGNI,因为 OP 提到聊天只有两个用户。 YAGNI(你不会需要它,所以现在不要构建它)是一个很好的原则。然而,许多聊天程序支持两个以上的用户,有时只支持一个用户。您可能会争辩说,考虑到这一点来构建数据模型是务实的。
关于该主题的进一步阅读:Preemptive Pluralization is (Probably) Not Evil