Под Предпочтениями , выберите Java -> , Редактор -> Сохраняют Действия . Проверьте , Выполняют выбранные действия с сохранением и устанавливают флажок Format source code .
Это может или не может быть доступно в предыдущих версиях Eclipse. Я знаю, что это работает в:
Version: 3.3.3.r33x_r20080129-_19UEl7Ezk_gXF1kouft<br>
Build id: M20080221-1800
Если вы вызовете account.users.size
вместо account.users.count
, он также будет включать пользователей, которые были созданы, но не сохранены в базу данных.
ОДНАКО это не решит полностью вашу проблему. Когда вы вызываете учетную запись
в пользователе, он не возвращает тот же экземпляр учетной записи, на который указывает @account
, поэтому он не знает о новых пользователях. Я считаю, что это будет «исправлено» в Rails 3, но пока я могу придумать пару решений.
Если вы сохраняете учетную запись одновременно с добавлением пользователей (что я предполагаю, так как вы вызываете update_attributes
), тогда валидация может идти туда.
# in account.rb
def validate_max_users_have_not_been_reached
errors.add_to_base("You cannot have more than #{maximum_amount_of_users} users on this account.") unless users.size < maximum_amount_of_users
end
Я не уверен, как вы сохраняете связанные модели, но если проверка учетной записи не удалась, их не следует сохранять.
Другое решение - сбросить экземпляр user.account
на self при обновлении атрибутов пользователя. Вы можете сделать это в методе установки users_attributes.
# in account.rb
def users_attributes=(attributes)
#...
user.account = self
#...
end
Таким образом, учетная запись пользователя будет указывать на тот же экземпляр учетной записи, поэтому account.users.size
должен вернуть сумму. В этом случае вы бы сохранили проверки в пользовательской модели.
Это сложная проблема, но, надеюсь, это дало вам некоторые идеи о том, как ее решить.
Причина, по которой он проходит, состоит в том, что update_attributes не проходит проверки.
Также - ваша логика проверяет только существующее количество учетных записей на их максимально разрешенное количество. Расчет количества пользователей, пытающихся добавить, не производится. Я думаю, что эта логика больше подходит модели учетной записи (?).