当角色与外部模型具有不同的关联时,如何为用户角色建模

时间:2013-12-09 20:55:25

标签: ruby-on-rails ruby-on-rails-3 authorization roles

当角色与外部模型有不同的关联时,如何为用户角色建模?

我有两个角色,老师和家长。老师有一个相关的学校,父母没有。这使得在单一模型中对教师和父母进行建模变得困难。

我不想单独对它们进行建模,因为它们的状态(字段)是相同的,并且它们都有一个“拥有并且属于许多”(HABTM)与孩子的关联。

我尝试使用单表继承(STI)解决了我的直接问题,但最终导致了更多问题。我希望有一个“构成而不是继承”的解决方案。

2 个答案:

答案 0 :(得分:2)

条件has_one关系可能适合您:

class Role < ActiveRecord::Base
  has_one :school, conditions: { name: 'Teacher' }
  belongs_to :user

然后你应该能够做到:

user = User.first
user.role # let's say he is a Teacher
user.role.school # => should return the school

有关has_one的一些文档: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one

答案 1 :(得分:2)

如果你想保留一个班级,条件关系可以帮助你

class User < AR
  has_one :school, conditions: { role: 'teacher' }
end

仍然有点古怪,但比STI更好