使用Cancan所以我需要检查用户角色。与用户建立了良好的关系 - > userroles(引用id) - > roles(每个角色的名称,角色位于名称列中)。
在我的用户模型中,我有一个函数:role?(role),即role?(:admin)
,它检查用户是否有角色。
def role?(role)
roles.include? role.to_s
end
这不起作用,我是否必须指定名称列?
解决了:经过一段时间后,我会把答案放下来。
答案 0 :(得分:2)
您正在将字符串与对象进行比较
def role?(role)
!roles.first(:conditions => {:name => role.to_s}).nil?
end
试试这个?
根据Dmitriy Likhten的回答替代
def role?(role)
roles.collect{|r| r.name }.include? role.to_s
end
答案 1 :(得分:1)
你总是可以直接过滤它......
roles.select(&:to_s).include?(role.to_s)
我和Jimmy的方法之间的区别取决于角色是否已经在记忆中。如果是,则过滤更快,如果不是更好的话。