Rails STI 设计 - 用户可以是 2 种类型

Rails STI design - user can be of 2 types

我需要一些关于我的用户模型的建议。我遇到了 STI 设计并使用 devise 实现了它。这是基本设置:

class Message < ActiveRecord
    has_one :sender
    has_one :recipient

# Devise user
class User < ActiveRecord

class Sender < User
    belongs_to :message

class Recipient < User
    belongs_to :message

我的难题是同一用户在不同情况下可能既是发件人又是收件人。我最初设置这个域模型,使得消息记录有 sender_idrecipient_id 两者都是简单的user_ids 没有定义任何 Railsy 关系或设计额外的东西。

我以前的解决方案似乎更灵活,但 STI 设计似乎更优雅,如果可能的话我想让它工作。据我了解,惯例是 type 字段识别哪个用户被返回。是否有使用 STI 的通用解决方案?

从广义上讲,每次我最终实现了多种 类型 的用户模型时,我都以后悔告终。正如您已经注意到的那样,很快您就会遇到想要成为这两种类型用户的人,突然之间您必须管理不同的帐户、重复登录、重复电子邮件等。

我建议改为设置单​​一类型的用户来扮演 has_and_belongs_to_many 角色。对于简单的情况,您可以简单地创建自己的角色模型和逻辑(这是我通常所做的),但看起来 gem 也得到了很好的支持:https://github.com/RolifyCommunity/rolify