每个用户都有很多角色;要找出用户是否具有“管理员”角色,我们可以使用以下has_role?
方法:
some_user.has_role?('admin')
其定义如下:
def has_role?(role_in_question)
roles.map(&:name).include?(role_in_question.to_s)
end
我希望能够写成some_user.has_role?('admin')
,some_user.is_admin?
所以我做到了:
def method_missing(method, *args)
if method.to_s.match(/^is_(\w+)[?]$/)
has_role? $1
else
super
end
end
这适用于这种some_user.is_admin?
情况,但是当我尝试在另一个关联中引用的用户上调用它时失败:
>> Annotation.first.created_by.is_admin?
NoMethodError: undefined method `is_admin?' for "KKadue":User
from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/associations/association_proxy.rb:215:in `method_missing'
from (irb):345
from :0
是什么赋予了?