我有3个名为
的表用户表
邮件表和
Message_users表
和Users表将用于存储用户信息,而Messages表将用于存储用户发送的消息,而Message_users表将存储message_id和sender_id(发送消息的用户)和receiver_id(接收消息的用户)
在Message的模型类中,我有这个
class Message < ApplicationRecord
has_many :user, :through :message_user dependent: :destroy
end
在用户模型中,我有这个
class User < ApplicationRecord
has_many :messages, :through :message_user, dependent: :destroy
end
我不知道这是否是在消息模型和用户模型之间建立链接的正确方法
答案 0 :(得分:0)
我不确定我是否了解您的模型,它看起来像是两个用户之间的对话,并且包含许多消息,但是您的“消息”模型具有许多“ message_users”或类似内容。我认为命名令人困惑。
我个人会有这样的模型:
Conversation
has_many :messages
has_and_belongs_to_many :users
Message
belongs_to :conversation
belongs_to :sender, class_name: 'User'
User
has_and_belongs_to_many :conversations
has_many :messages, as: :sender
您实际上并不需要保存receive_id(对话中的任何用户都不是消息的发件人)。同样,您可以在同一会话中以相同的配置拥有两个以上的用户。
了解HasAndBelongsToMany(它要求您创建一个联接表“ conversations_users”,但不需要模型)https://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
我知道它不尊重您的原始表,但至少对我来说它们看起来令人困惑。