Validar quantidade máxima de objetos associados

Eu tenho um modelo de conta e um modelo de usuário:

class Account < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
end

Os usuários pertencem a uma conta e uma conta a um usuário máximo (diferente para cada conta). Mas como eu confirmo que esse máximo não foi atingido ao adicionar novos usuários a uma conta?

Primeiro eu tentei adicionar uma validação no usuário:

class User < ActiveRecord::Base
  belongs_to :account
  validate :validate_max_users_have_not_been_reached

  def validate_max_users_have_not_been_reached
    return unless account_id_changed? # nothing to validate
    errors.add_to_base("can not be added to this account since its user maximum have been reached") unless account.users.count < account.maximum_amount_of_users
  end
end

Mas isso só funciona se eu estou adicionando um usuário por vez.

Se eu adicionar vários usuários via@account.update_attributes(:users_attributes => ...) apenas passa diretamente, mesmo que haja apenas espaço para mais um usuário.

Atualizar:

Apenas para esclarecer: O método de validação atual valida queaccount.users.count é menos do queaccount.maximum_amount_of_users. Então diga, por exemplo, queaccount.users.count é 9 eaccount.maximum_amount_of_users é 10, então a validação passará porque 9 <10.

O problema é que a contagem retornouaccount.users.count não aumentará até que todos os usuários tenham sido gravados no banco de dados. Isso significa que adicionar vários usuários ao mesmo tempo passará validações, pois a contagem de usuários será a mesma até que todos sejam validados.

Assim comoaskegg aponta, devo adicionar validação ao modelo de conta também? E como isso deve ser feito?

questionAnswers(2)

yourAnswerToTheQuestion