Validar cantidad máxima de objetos asociados.

Tengo un modelo de cuenta y un modelo de usuario:

class Account < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
end

Los usuarios pertenecen a una cuenta y una cuenta tiene un máximo de usuario (diferente para cada cuenta). Pero, ¿cómo validar que no se haya alcanzado este máximo al agregar nuevos usuarios a una cuenta?

Primero intenté agregar una validación al usuario:

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

Pero esto solo funciona si estoy agregando un usuario a la vez.

Si agrego múltiples usuarios a través de@account.update_attributes(:users_attributes => ...) simplemente pasa directamente incluso si solo hay espacio para un usuario más.

Actualizar:

Solo para aclarar: el método de validación actual valida queaccount.users.count es menos queaccount.maximum_amount_of_users. Así que digamos por ejemplo queaccount.users.count es 9 yaccount.maximum_amount_of_users es 10, entonces la validación pasará porque 9 <10.

El problema es que el recuento devuelto desdeaccount.users.count no aumentará hasta que todos los usuarios hayan sido escritos en la base de datos. Esto significa que agregar varios usuarios al mismo tiempo pasará las validaciones, ya que el recuento de usuarios será el mismo hasta que todos estén validados.

Así comopreguntando señala, ¿debería agregar validación al modelo de cuenta también? ¿Y cómo se debe hacer eso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta