:through关联是链接Ruby on Rails中的联合表的正确方法吗?

时间:2019-05-23 23:21:26

标签: ruby-on-rails ruby ruby-on-rails-5

我有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

我不知道这是否是在消息模型和用户模型之间建立链接的正确方法

1 个答案:

答案 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

我知道它不尊重您的原始表,但至少对我来说它们看起来令人困惑。

相关问题