Проверка Rails 2.3.8 не работает из консоли (действует? Всегда возвращает true) - PullRequest
1 голос
/ 08 ноября 2011

Я недавно обновил свое приложение 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 *

1 Ответ

1 голос
/ 09 ноября 2011

Ваши проверки зависят от того, находится ли компания на определенном этапе.Вы никогда не устанавливаете это свойство в консоли.Что произойдет, если вы попытаетесь:

c = Company.new
c.step = 1
c.valid?

Я просто предполагаю, что метод step? просто проверяет равенство атрибута step.Если нет, сделайте все возможное, чтобы ваша модель удовлетворяла step?(1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...