我有一些调用
的代码current_user.is_admin?
代码工作正常,但我无法弄清楚is_admin?
方法的定义位置。我正在使用Devise,CanCan和role_model,但该方法不属于任何这些项目的源代码,也不属于我的......
我还尝试在Rails控制台中执行此操作来查找owner of the method:
current_user.method(:is_admin?).owner
=> #<Module:0x00000105253c98>
但这没什么帮助......
答案 0 :(得分:1)
我通过以下方式获得了源位置:
current_user.method(:is_admin?).source_location
(感谢@BroiSatse)
这指向了role_model中的这个文件: https://github.com/martinrehfeld/role_model/blob/master/lib/role_model/class_methods.rb
结果是role_model根据指定的角色动态创建方法 - 这就是为什么它没有显示在源代码中......
来自 class_methods.rb :
# Defines dynamic queries for :role
# #is_<:role>?
# #<:role>?
#
# Defines new methods which call #is?(:role)
def define_dynamic_queries(roles)
dynamic_module = Module.new do
roles.each do |role|
["#{role}?".to_sym, "is_#{role}?".to_sym].each do |method|
define_method(method) { is? role }
end
end
end
include dynamic_module
end