如何对实际拥有字段的对象使用rails polymorphic?

时间:2011-05-09 20:32:48

标签: ruby-on-rails ruby model polymorphism

假设我有一个User模型,我希望拥有不同的用户角色。在单个应用程序中,您可以简单地将角色存储为字符串,或者作为另一个模型存储,这很好。

但是,如果您想为各个模型存储更多关联呢?例如,假设管理员包含指向集合的链接,并且属于常规用户不应该关联的许多集合?事实上,其他用户将链接到管理员没有的其他一组模型。

我们是否将所有关联放在User对象中,并根据用户的类型忽略它们?或者我们是否开始将User(如Hibernate)子类化为仅包含该用户类型的关联和模型逻辑?

在rails中执行此操作的方法是什么?谢谢!

1 个答案:

答案 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
相关问题