我正在构建一个Ruby on Rails应用程序,我正在分离两组用户:
目前有人在Users表下使用以下内容构建数据库:
t.string "user_type", default: "buyer", null: false
我需要为卖家提供一些其他数据,还有一些我希望卖家可以访问的功能/页面,但不是买家
例如,我想保留银行详细信息,以便我可以向卖家支付买家支付的费用(我们会保留几天的付款以确保安全交易)。所以附加数据可能是:
我们无需为买家存储此数据,因为他们使用Stripe付款。
我们是否在当前用户表中包含数据?或者我们是否创建了一个链接到Users表的新卖家表?
答案 0 :(得分:2)
您可以使用一张桌子并在模型中有所不同。作为用户,他们将分享许多共同的功能,例如sign_in期间的身份验证,更改密码等
class User < ActiveRecord::Base
...
end
class Buyer < User
def buyer_specific_method_one
...
end
end
class Seller < User
def seller_specific_method_one
...
end
end
并将名为“type”的字符串字段添加到用户表中。请参阅Single Table Inheritance。
答案 1 :(得分:0)
您可以使用多种选项。不一定是一种,有些组合是可能的:
将差异(银行明细?)分解为单独的模型与User
的一对一关系
user_type
更改为type
,然后再创建另外两个模型而不使用表格(--no-migration
),而不是继承{{1} },但是来自ActiveRecord::Base
,所以他们继承了持久性的表User
表需要包含所有子类的所有列users
子类(如User
)都将被定义为具有特定Buyer
(User
)type
Serialize attributes您将仅在应用级别处理,而不是在数据库中处理
"Buyer"
- 类型列