Zatwierdź maksymalną ilość powiązanych obiektów

Mam model konta i model użytkownika:

class Account < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
end

Użytkownicy należą do konta, a konto ma maksimum użytkownika (różne dla każdego konta). Ale jak sprawdzić, czy nie osiągnięto tego maksimum podczas dodawania nowych użytkowników do konta?

Najpierw próbowałem dodać walidację użytkownika:

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

Ale działa to tylko wtedy, gdy dodam jednego użytkownika naraz.

Jeśli dodam wielu użytkowników za pośrednictwem@account.update_attributes(:users_attributes => ...) przechodzi bezpośrednio, nawet jeśli jest miejsce tylko dla jednego użytkownika.

Aktualizacja:

Aby wyjaśnić: Obecna metoda walidacji to potwierdzaaccount.users.count jest mniej niżaccount.maximum_amount_of_users. Powiedzmy na przykład toaccount.users.count wynosi 9 iaccount.maximum_amount_of_users wynosi 10, a walidacja zakończy się, ponieważ 9 <10.

Problem polega na tym, że licznik wróciłaccount.users.count nie zwiększy się, dopóki wszyscy użytkownicy nie zostaną zapisani w bazie danych. Oznacza to, że dodawanie wielu użytkowników w tym samym czasie przejdzie walidację, ponieważ liczba użytkowników będzie taka sama aż do momentu, gdy wszystkie zostaną zweryfikowane.

Tak jakpytać wskazuje, czy powinienem dodać walidację do modelu konta? A jak to zrobić?

questionAnswers(2)

yourAnswerToTheQuestion