动态添加/修改activerecord关联

时间:2011-04-21 15:22:39

标签: ruby-on-rails activerecord associations

我认为我认为ActiveRecord并不是一个独特的情况,但我似乎找不到任何有类似问题的人,所以这里有:

我有一个User用户类和一个定义用户功能的Roles类。例如,您可以拥有一个角色为'tutor'的用户,一个角色为'student'的用户,以及一个角色为['tutor','student']的用户:

class User < ActiveRecord::Base
  has_many :roles
end

class Role < ActiveRecord::Base

end

我想做的是根据角色添加activerecord关联。显然,一个学生可能有很多:课程,导师可能有:他们教的科目,学生和导师都可以有很多:约会,但似乎并没有将所有这些关联添加到每个用户实例是正确的要走的路。

子类用户似乎也错了 - 我考虑过做Tutor&lt;用户和学生&lt;用户,并在每个子类中添加适当的关联,但是如果我们有一个学生是导师会怎么样?那我们需要一个StudentTutor课程吗?如果添加更多角色,这条路线似乎很危险。

我考虑过这样做:

class User < ActiveRecord::Base

  protected

  after_initialize do
    if self.has_role?(Role::STUDENT)
      has_many :courses # This does not work
    else
      # etc etc etc
    end
  end
end

但我不知道这是否被认为是错误的,或者我是如何让它工作的。使用关联来处理这种用户/角色设置的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我会为你的问题推荐一个宝石。请参阅相关的SO问题:Recommendation for Role Gem

答案 1 :(得分:0)

我会做以下事情:

class User < ActiveRecord::Base
  has_many :roles
end

class Role < ActiveRecord::Base
end

class Tutor < Role
  has_one :subject
end

class Student < Role
  has_many :courses
end