ruby-on-rails - 多个具有并属于多个关系

标签 ruby-on-rails ruby postgresql activerecord

我有一个模型有 has_and_belongs_to_many与其他两个模型的关系。例如,我有一个 Message具有收件人的模型。但是,接收者可以是两种不同类型的模型之一。例如,InternalContact , 和 ExternalContact .

建立关系很容易,我可以获得消息的外部联系人 ( Message.first.external_contacts ) 或其内部联系人 ( Message.first.internal_contacts )。然后我可以以同样的方式轻松地添加到这个关系数组 ( Message.first.external_contacts << ExternalContact.first )

我想要的是能够通过调用类似的东西来简化事情并使其更有效:

Message.first.recipients # an array of both external and internal contacts
Message.first.recipients << ExternalContact/InternalContact # (add either model)

任何方向表示赞赏,我肯定被困住了!

最佳答案

您可以有一个单独的收件人类型表,然后仅将消息与收件人映射

Recipient          Recipient_type   Message       Message_recipient_map
----------         ---------------  -------       -------------------
id                 id               id            message_id  
recipient_type_id                                 recipient_id 

然后你可以在消息和收件人之间建立 has_many_through 关系,并且可以通过调用 message.recipients 访问消息的所有收件人

希望对你有帮助!

关于ruby-on-rails - 多个具有并属于多个关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55694484/

相关文章:

ruby-on-rails - 更改 rails 中的默认样式表目录

ruby-on-rails - rspec 规范仅在整个测试套件中运行时失败 - 单独运行时通过

ruby-on-rails - 从 Paypal 重定向时 Rails/Device session 被破坏

ruby - 如何在 env.rb 或 hook.rb 中创建变量并调用 cucumber 功能?

sql - 如何获取距离当前时间 30 秒创建或更新的数据 PostgreSQL

c# - Node 连接到 Postgres 的速度比 .NET Core 快 20 倍

java - Arval SQLException : FATAL: sorry, postgres 中已有太多客户端

mysql - Sphinx 可以匹配与所提供的搜索参数相似的术语或短语吗?

ruby - map(& :name) mean in Ruby? 是什么意思

ruby-on-rails - 用户 has_many 关联不起作用(错误 :Could not find the association :user_categories in model Category)