检查has-many关系中的角色

时间:2011-05-16 15:57:41

标签: ruby-on-rails ruby-on-rails-3

使用Cancan所以我需要检查用户角色。与用户建立了良好的关系 - > userroles(引用id) - > roles(每个角色的名称,角色位于名称列中)。

在我的用户模型中,我有一个函数:role?(role),即role?(:admin),它检查用户是否有角色。

def role?(role)
   roles.include? role.to_s
end

这不起作用,我是否必须指定名称列?

解决了:经过一段时间后,我会把答案放下来。

2 个答案:

答案 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的方法之间的区别取决于角色是否已经在记忆中。如果是,则过滤更快,如果不是更好的话。