虽然我的问题特别在Ruby on Rails中,但我也一般都会问:我有一个用户表,想要指定一些用户是学生,其他人是教师。在这种情况下,设计模式的最佳方法是什么?
编辑: 虽然我最初接受了冯康拉德的答案 - 它符合原始标准 - 我必须根据nhnb的反馈重新打开并调整问题。
如果学生和/或教师需要其他(独特)属性,应该怎么做?
答案 0 :(得分:2)
在这种情况下,我只需要使用一个名为teacher
的布尔列。如果是,则用户是教师。如果是假的,那就是学生。无需创建另一个模型。
如果您想要两个以上角色(例如,学生,教师,管理员,管理员(?)),您可以添加另一个名为UserGroup的模型。您还必须在名为user_group_id
的用户表中创建一个列。在新模型中,每个角色都有一行。然后,您指定以下关系:
class User < ActiveRecord::Base
belongs_to :user_group
end
class UserGroup < ActiveRecord::Base
has_many :users
end
这样您就可以将每个用户分配到特定的组。
答案 1 :(得分:2)
这在很大程度上取决于教师和学生之间的不同属性的数量以及添加或删除新的唯一属性的频率。如果情况不同,那么你有两个选择:
has_many :user, :polymorphic => true
)users
表和user_attributes
表。 users
会有id, user_type, username, etc.
而user_attributes
会有id, user_id, attribute_name, value
。但是,如果您在两个用户之间的不同属性很少而且非常坚固,那么您应该考虑使用Single Table Inheritance。
祝你好运!