【发布时间】:2023-03-22 06:50:02
【问题描述】:
我正在开始一个具有多种用户的项目,基本上是买方和卖方模型。有些属性适用于买方,但不适用于卖方,但它们具有许多基本的用户特征。如果它不是一个网络应用程序,我知道如何进行继承,但是在 rails 中执行此操作的正确方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby class
我正在开始一个具有多种用户的项目,基本上是买方和卖方模型。有些属性适用于买方,但不适用于卖方,但它们具有许多基本的用户特征。如果它不是一个网络应用程序,我知道如何进行继承,但是在 rails 中执行此操作的正确方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby class
您在 Rails 中寻找的概念称为Single Table Inheritance。
您创建一个基类User 模型,然后以User 作为基类对不同的其他模型进行子类化。
【讨论】:
如果是引入角色或组的概念,您应该添加角色或组模型,以便用户可以成为买家和卖家。但由于它与角色无关,并且您的目标是拥有特定于买方和/或卖方的字段,因此您应该有两个额外的模型,称为买方和卖方,然后在用户模型中与每个模型建立关联。这样一来,用户就可以是买方、卖方,甚至两者兼有。
如果您在某些时候需要用户和卖家之间的多对多(例如),那么即使您可以使用 HABTM 来做到这一点,最好引入 tie 模型并使用 has_many :through , 这样它就可以有关于关系等的数据。
假设您正在使用 ActiveRecord,请在开始之前仔细阅读此内容:http://guides.rubyonrails.org/association_basics.html
(或者,对于边缘:http://edgeguides.rubyonrails.org/association_basics.html)
【讨论】:
为角色/用户类型之间共享的所有基本属性创建一个User 模型。然后为Buyer 和Seller 和delegate 制作单独的模型,所有共享属性到User 模型。
这种方法不适用于很多用户类型,但应该足以满足您的情况。
参考:http://api.rubyonrails.org/classes/Module.html#method-i-delegate
【讨论】: