【问题标题】:Rails STI design - user can be of 2 typesRails STI 设计 - 用户可以是 2 种类型
【发布时间】:2016-12-02 21:41:04
【问题描述】:

我需要一些关于我的用户模型的建议。我遇到了 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_id 没有定义任何 Railsy 关系或设计额外的东西。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 很好的答案,我赞成。此外,您可以为用户提供多个模型 - 与身份验证相关的所有内容都将保留在 User 中,而与“发送”相关的所有内容都可以进入 Sender。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多