使用Cancan,所以我需要检查用户角色。与用户 -> 用户角色(引用 ID)-> 角色(每个角色的名称,角色位于名称列中)有has_many关系。
在我的用户模型中,我有一个函数:角色?(角色),即role?(:admin)
,用于检查用户是否具有角色。
def role?(role)
roles.include? role.to_s
end
这不起作用,我必须指定名称列吗?
已解决:时间过后我会把答案放下。
您正在将字符串与对象进行比较
def role?(role)
!roles.first(:conditions => {:name => role.to_s}).nil?
end
试试这个?
基于德米特里·利赫滕的回答的替代方案
def role?(role)
roles.collect{|r| r.name }.include? role.to_s
end
您始终可以在线过滤它...
roles.select(&:to_s).include?(role.to_s)
我和吉米的方法之间的区别取决于这个角色是否已经在记忆中。如果是,则筛选更快,如果不是查询更好。