Rails STI设计 - 用户可以有两种类型

时间:2016-12-02 21:41:04

标签: ruby-on-rails ruby ruby-on-rails-4 devise sti

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

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_id recipient_id ,这两者都只是 user_id ,而没有定义任何Railsy关系或设计演员。

我之前的解决方案似乎更灵活,但STI设计看起来更优雅,如果可能的话,我想让它发挥作用。据我所知,惯例是 type 字段可以识别返回哪个用户。有没有使用STI的常见解决方案?

1 个答案:

答案 0 :(得分:2)

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

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