轨道上的红宝石 - 检查多关系中的角色



使用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)

我和吉米的方法之间的区别取决于这个角色是否已经在记忆中。如果是,则筛选更快,如果不是查询更好。

相关内容

  • 没有找到相关文章

最新更新