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_id 和 recipient_id 两者都是简单的user_ids 没有定义任何 Railsy 关系或设计额外的东西。
我以前的解决方案似乎更灵活,但 STI 设计似乎更优雅,如果可能的话我想让它工作。据我了解,惯例是 type 字段识别哪个用户被返回。是否有使用 STI 的通用解决方案?
从广义上讲,每次我最终实现了多种 类型 的用户模型时,我都以后悔告终。正如您已经注意到的那样,很快您就会遇到想要成为这两种类型用户的人,突然之间您必须管理不同的帐户、重复登录、重复电子邮件等。
我建议改为设置单一类型的用户来扮演 has_and_belongs_to_many
角色。对于简单的情况,您可以简单地创建自己的角色模型和逻辑(这是我通常所做的),但看起来 gem 也得到了很好的支持:https://github.com/RolifyCommunity/rolify
我需要一些关于我的用户模型的建议。我遇到了 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_id 和 recipient_id 两者都是简单的user_ids 没有定义任何 Railsy 关系或设计额外的东西。
我以前的解决方案似乎更灵活,但 STI 设计似乎更优雅,如果可能的话我想让它工作。据我了解,惯例是 type 字段识别哪个用户被返回。是否有使用 STI 的通用解决方案?
从广义上讲,每次我最终实现了多种 类型 的用户模型时,我都以后悔告终。正如您已经注意到的那样,很快您就会遇到想要成为这两种类型用户的人,突然之间您必须管理不同的帐户、重复登录、重复电子邮件等。
我建议改为设置单一类型的用户来扮演 has_and_belongs_to_many
角色。对于简单的情况,您可以简单地创建自己的角色模型和逻辑(这是我通常所做的),但看起来 gem 也得到了很好的支持:https://github.com/RolifyCommunity/rolify