【问题标题】:Conversation Migration Ruby on Rails对话迁移 Ruby on Rails
【发布时间】:2019-12-24 01:38:12
【问题描述】:
class Conversation < ApplicationRecord
    has_many :messages, dependent: :destroy
    has_and_belongs_to_many :users
end

我上面有这个模型,但我不确定如何处理这个表的迁移。基本上,每个“对话”可以有多个用户,比如群聊,然后它也有很多消息。知道我应该如何创建迁移吗?

class CreateConversations < ActiveRecord::Migration[5.2]
  def change
    create_table :conversations do |t|

      t.timestamps
    end
  end
end

我的消息迁移如下所示:

class CreateMessages < ActiveRecord::Migration[5.2]
  def change
    create_table :messages do |t|
      t.references :sender
      t.references :conversation
      t.text :content

      t.timestamps
    end
  end
end

这看起来对吗?

【问题讨论】:

标签: ruby-on-rails ruby postgresql migration


【解决方案1】:

您的conversationsmessages 表看起来不错,但您的Sender(用户?)模型应该与Conversation 具有belongs_to 关系。将此添加到 senders 迁移中:

t.references :conversation

编辑:我不好,上面的解决方案假设一个Sender 到一个Conversation 关系,但多对多关系似乎更合适(Conversation 可以有多个Senders,和Sender可以在多个Conversations)

在这种情况下,您需要的是一个映射这种多对多关系的 senders_conversations 表。 Read up on ActiveRecord many-to-many here

上面链接中的rails g migration CreateJoinTableAuthorsBooks authors books 是您所需要的(用发件人和对话替换作者和书籍)。

【讨论】:

  • 我的用户(发件人)模型有这个:has_and_belongs_to_many :conversations,dependent: :destroy 这可行吗?这真的很乱哈哈
  • 我在运行时出于某种原因收到此查询: User.first.conversations.to_sql "SELECT \"conversations\".* FROM \"conversations\" INNER JOIN \"conversations_users\" ON \ "conversations\".\"id\" = \"conversations_users\".\"conversation_id\" WHERE \"conversations_users\".\"user_id\" = 1" "conversations_users" 表是从哪里来的??
  • @RyanGlen Rails 知道has_and_belongs_to_many 关系需要这样一个表。检查您的db/schema.rb 文件,您应该可以在其中找到conversations_users 表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2012-11-11
  • 1970-01-01
  • 2010-12-29
  • 2015-09-09
  • 2011-04-29
  • 2013-11-03
相关资源
最近更新 更多