鉴于以下内容:
class User; attr_accessor :roles; end
module RegisteredUser
def default_context
Submission
end
end
module Admin
def default_context
Review
end
end
current_user = User.new
current_user.roles = ["registered_user", "admin"]
current_user.roles.each do |role|
role_module = role.gsub(/ /, '_').camelize
if module_exists?(role_module)
current_user.extend role_module.constantize
end
end
context = self.extend current_user.default_context
有没有办法设置User#default_context
的优先级?也就是说,我可以说,Admin#default_context
始终优先于RegisteredUser#default_context
,而不管current_user
的延伸顺序是什么?
答案 0 :(得分:2)
method_added
位于Module
。
我的意思是included
,而不是extended
,但两者都在Module
。
该机制将围绕这样做:
module Foo
def self.included(base)
base.extend(FooMethods)
end
module FooMethods
def bar
# Whatever
end
end
end
在Foo.included
内,您可以根据任意标准确定是否应将相关方法添加到base
(包含模块的实体)。
在您的情况下,您可以检查是否已包含“更高优先级”模块,或查看模块 是否为“更高优先级”模块。基于此,您决定是否添加方法。