在我的应用中,有两个types
用户(运动员和用户)。 Athlete
继承了使用STI设置的User
类。还有其他类型的用户,但这些类型的用户是基于他们的角色设置的。
示例:
教练 - > Regular User with the role of 'Coach'
学校管理员 - > Regular User with the role of 'School Admin'
贡献者 - > Regular User with the role of Contributor
旧代码在我的应用中挥之不去曾经有Coach
作为用户类型(class Coach < User;
),但在我的应用中向前推进将Coach作为单一内容并没有多大意义用户类型。我将采用Coach模型中的方法并将它们移到模块中,但很想知道是否只有在用户具有Coach角色时才能包含模块?
答案 0 :(得分:0)
是的,这是可能的。一种方法是:
class User < ActiveRecord::Base
...
after_initialize :extend_with_role_module
private
def extend_with_role_module
case role
when 'coach'
self.extend CoachModule
when 'school_admin'
self.extend SchoolAdminModule
when 'contributor'
self.extend Contributor
end
end
...
end
但这是一个糟糕的设计,因为after_initialize
块将被加载到内存中的所有User
个实例。代码可能是由于重构。