Rails 3 - Запрос к базе данных по моделям User и Role в условиях "многие ко многим"

У меня есть две сущности. Пользователь и роль. Я использую 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
#

Между пользователями и ролями существует много-много отношений. (Таблица role_users) Любая помощь с этим?

Спасибо

1 ответ

Решение

Это может быть что-то вроде этого:

def maximum_numbers_of_admins
    if Role.find(:conditions => ['name = ?', 'Administrator']).users.count < 2
      return true
    else
      return false
    end
end
Другие вопросы по тегам