Rails 3 - 数据库查询模型用户和角色在多种情况下

时间:2012-01-23 17:49:16

标签: ruby ruby-on-rails-3 activerecord devise cancan

我有两个实体。用户和角色。我正在使用Devise和CanCan。 他们处于多对多的关系中。

用户有很多角色。 其中一个角色是“管理员”。我使用以下命令验证我的用户是否是管理员:

if (user.role? :administrator) .... #this is already implemented and working

我必须验证在系统上的同一部门中从不存在超过2个管理员。为此,我创建了一个自定义验证方法:

class User < ActiveRecord::Base
    validate :maximum_numbers_of_admins if self.role? :administrator
    belongs_to :department

    def maximum_numbers_of_admins
        #Some code here
    end

在该方法中,我应该计算具有角色管理员的用户数量(不计算自己)。 我不知道如何设置我的find方法的条件来获得这个数字。

这是Role类的规范:

# == Schema Information
#
# Table name: roles
#
#  id         :integer         not null, primary key
#  name       :string(255)
#  created_at :datetime
#  updated_at :datetime
#

用户和角色之间存在多对多的关系。 (表roles_users) 对此有何帮助?

由于

1 个答案:

答案 0 :(得分:2)

这可能是这样的:

def maximum_numbers_of_admins
    if Role.find(:conditions => ['name = ?', 'Administrator']).users.count < 2
      return true
    else
      return false
    end
end