Bestätigen Sie die maximale Anzahl zugeordneter Objekte

Ich habe ein Kontomodell und ein Benutzermodell:

class Account < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
end

Benutzer gehören zu einem Konto und ein Konto hat ein Benutzer-Maximum (für jedes Konto unterschiedlich). Aber wie überprüfe ich, dass dieses Maximum beim Hinzufügen neuer Benutzer zu einem Konto nicht erreicht wurde?

Zuerst habe ich versucht, dem Benutzer eine Validierung hinzuzufügen:

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

Dies funktioniert jedoch nur, wenn jeweils ein Benutzer hinzugefügt wird.

Wenn ich mehrere Benutzer über hinzufüge@account.update_attributes(:users_attributes => ...) Es geht einfach direkt durch, auch wenn nur noch Platz für einen Benutzer vorhanden ist.

Aktualisieren:

Nur zur Verdeutlichung: Die aktuelle Validierungsmethode validiert diesaccount.users.count ist weniger alsaccount.maximum_amount_of_users. Sagen Sie das zum Beispiel soaccount.users.count ist 9 undaccount.maximum_amount_of_users 10 ist, dann wird die Validierung bestanden, weil 9 <10.

Das Problem ist, dass die Zählung von zurückgegeben wurdeaccount.users.count wird erst erhöht, wenn alle Benutzer in die Datenbank geschrieben wurden. Dies bedeutet, dass das gleichzeitige Hinzufügen mehrerer Benutzer die Validierungen besteht, da die Benutzeranzahl bis zur Validierung der Benutzer alle gleich ist.

So wieaskegg weist darauf hin, dass ich das Kontomodell auch validieren sollte. Und wie soll das gemacht werden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage