Проверить максимальное количество связанных объектов
У меня есть модель учетной записи и модель пользователя:
class Account < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
belongs_to :account
end
Пользователи принадлежат учетной записи, а учетная запись имеет максимум пользователей (отличается для каждой учетной записи). Но как мне проверить, что этот максимум не был достигнут при добавлении новых пользователей в учетную запись?
Сначала я попытался добавить проверку для пользователя:
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
Но это работает, только если я добавляю по одному пользователю за раз.
Если я добавлю несколько пользователей через@account.update_attributes(:users_attributes => ...)
он просто проходит напрямую, даже если есть место только для еще одного пользователя.
Update:
Просто чтобы уточнить: текущий метод проверки подтверждает, чтоaccount.users.count
меньше чемaccount.maximum_amount_of_users
, Так скажем, например, чтоaccount.users.count
9 иaccount.maximum_amount_of_users
будет 10, тогда проверка пройдет, потому что 9 & lt; 10.
Проблема в том, что счетчик вернулся изaccount.users.count
не будет увеличиваться, пока все пользователи не будут записаны в базу данных. Это означает, что добавление нескольких пользователей одновременно пройдет валидацию, поскольку количество пользователей будет одинаковым до тех пор, пока все они не будут проверены.
Таким образомaskegg указывает на то, должен ли я добавить проверку в модель учетной записи? И как это должно быть сделано?