假设我有一个User模型,我希望拥有不同的用户角色。在单个应用程序中,您可以简单地将角色存储为字符串,或者作为另一个模型存储,这很好。
但是,如果您想为各个模型存储更多关联呢?例如,假设管理员包含指向集合的链接,并且属于常规用户不应该关联的许多集合?事实上,其他用户将链接到管理员没有的其他一组模型。
我们是否将所有关联放在User对象中,并根据用户的类型忽略它们?或者我们是否开始将User(如Hibernate)子类化为仅包含该用户类型的关联和模型逻辑?
在rails中执行此操作的方法是什么?谢谢!
答案 0 :(得分:1)
我建议使用Rails Single Table Inheritance。从本质上讲,您的数据库中将有一个users
表,以及一个根User
模型。多个模型(每个“角色”一个)可以从User
继承,并拥有自己的关联:
# Regular users have no associations
class User < ActiveRecord::Base
end
# Admins have collections and notes
class Admin < User
has_many :collections
has_many :notes
end
# Editors only have notes
class Editor < User
has_many :notes
end