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?