chat属于两个用户示例,用户有很多:chat(ruby on rails)

arknldoa  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(378)

我正在建立一种“非即时通讯系统”。我的系统由许多用户、聊天室和消息组成。
用户可以进行多次聊天
聊天只能属于两个不同的用户
消息属于一个用户和一个聊天室
我设计它的方式是:

rails g model Chat user1:references user2:references
rails g model Message user:references chat:references

然后在my models/chat.rb中,我会:


# models/chat.rb

class Chat < ApplicationRecord
  belongs_to :user1, :class_name => 'User'
  belongs_to :user2, :class_name => 'User'
end

my models/message.rb model


# models/message.rb

belongs_to :user
belongs_to :chat

和my models/user.rb model


# models/user.rb

has_many :chats
has_many :messages, through: :chats

所有这些建模对我来说都很有意义,但我就是无法让它工作。我需要能够做一些类似的事情 User.find(1).chats 并让它返回所有用户的聊天记录。也 Chat.find(1).users 那太好了。user.find(1).messages并没有那么麻烦,因为它是一种非常标准的关系,但是其他的呢?我错过了什么?我已经通过论坛阅读了论坛,但我似乎找不到任何解决方案来处理我的具体案例。

wwwo4jvm

wwwo4jvm1#

我建议(在@tonyarra的协助下)进行以下更改:
聊天 have_many 信息
消息 belongs_to 聊天
聊天 have_and_belongs_to_many (或 belongs_to )使用者
使用者 have_and_belongs_to_many (或 have_many )聊天
这将是对此建模的传统方法,我认为它将支持您的用例。
我在评论中提到了雅格尼,因为op提到的聊天只有两个用户。yagni(您不需要它,所以现在不要构建它)是一个伟大的原则。然而,许多聊天程序支持两个以上的用户,有时仅支持一个用户。您可以认为,考虑到这一点构建数据模型是务实的。
关于这个问题的深入阅读:先发制人的多元化(可能)不是邪恶的

相关问题