Я недавно обновил свое приложение rails с rails 2.3.3 до 2.3.8 и столкнулся с такой проблемой: все проверки моделей работают нормально в браузере, но полностью игнорируются при их тестировании с использованием .valid? метод из консоли. Это случилось со всеми моими моделями.
Например, моя компания модель имеет:
class Company < Content
...
# Validation
before_validation :ensure_token_existance
validates_presence_of :name,
:address,
:employee_count,
:category_ids,
:region_ids,
:phone,
:email,
:if => Proc.new { |company| company.step?(1) },
:message => "required field"
validates_presence_of :description,
:if => Proc.new { |company| company.step?(2) },
:message => "required field"
after_update :cache_sweeper
...
Сейчас тестируем проверку экземпляра Company с консоли:
$ script/console
Loading development environment (Rails 2.3.8)
>> c = Company.new
=> #<Company id: nil, account_id: nil, name: nil, description: nil, employee_count: nil, logo_file_name: nil, logo_content_type: nil, logo_file_size: nil, logo_updated_at: nil, created_at: nil, updated_at: nil, moderation: nil, token: nil, expired_at: nil, address: nil, phone: nil, fax: nil, email: nil, site: nil, delta: true, position: nil, major_company: false, wizard_step: 0, manager_id: nil, org_form: "", robots: nil, language: nil>
>> c.valid?
=> true
>> c.errors
=> #<ActiveRecord::Errors:0x105004848 @errors=#<OrderedHash {}>, @base=#<Company id: nil, account_id: nil, name: nil, description: nil, employee_count: nil, logo_file_name: nil, logo_content_type: nil, logo_file_size: nil, logo_updated_at: nil, created_at: nil, updated_at: nil, moderation: "draft", token: "mYoXPgNYwxBmdCTI", expired_at: nil, address: nil, phone: nil, fax: nil, email: nil, site: nil, delta: true, position: nil, major_company: false, wizard_step: 0, manager_id: nil, org_form: "", robots: nil, language: nil>>
>> c.save
=> true
>> c.save!
=> true
Я проверил http://guides.rubyonrails.org/v2.3.8/activerecord_validations_callbacks.html#when-does-validation-happen:
Следующие методы запускают проверки и сохраняют объект в
база данных, только если объект действителен:
create
create!
save
save!
update
update_attributes
update_attributes!
Версии взрыва (например, сохранить!) Вызывают исключение, если запись
недействительным. Версии без взрыва не делают: save и update_attributes
вернуть false, создать и обновить, просто вернуть объект / ы.
Может кто-нибудь помочь мне выяснить, что здесь не так, пожалуйста? =) * +1022 *