Rails 3 - Запрос к базе данных по моделям User и Role в условиях «многие ко многим» - PullRequest
0 голосов
/ 23 января 2012

У меня есть две сущности. Пользователь и роль. Я использую Devise и CanCan. Они находятся во многих отношениях.

У пользователя много ролей. Одна из ролей - «Администратор». Я проверяю, является ли мой пользователь администратором, используя:

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

Я должен подтвердить, что в системе никогда не существует более двух администраторов в одном отделе. Для этого я создал собственный метод проверки:

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 Ответ

2 голосов
/ 23 января 2012

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

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