J'ai récemment mis à jour mon application rails à partir des rails 2.3.3 à 2.3.8 et j'ai rencontré un tel problème: toutes les validations de modèles fonctionnent correctement dans navigateur, mais complètement ignoré lors du test en utilisant .valid? méthode de la console. Cela arrive à tous mes modèles. Par exemple, mon entreprise modèle a:La validation Rails 2.3.8 ne fonctionne pas à partir de la console (valide? Renvoie toujours vrai)
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
...
test maintenant la validation de l'instance Société de la console:
$ 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
J'ai vérifié http://guides.rubyonrails.org/v2.3.8/activerecord_validations_callbacks.html#when-does-validation-happen:
Les méthodes suivantes déclenchement validations, et enregistrera l'objet à la base de données seulement si l'objet est valide:
create create! save save! update update_attributes update_attributes!
Les versions bang (par ex. save!) déclenche une exception si l'enregistrement est invalide. Les versions non-bang ne le font pas: save et update_attributes retourne false, crée et met juste à jour l'objet/s.
Quelqu'un peut-il m'aider à trouver ce qui ne va pas ici? =)
Est-ce que votre '' ': if => Proc.new {| compagnie | company.step? (1)} '' 'cause le problème? car je ne vous vois pas en train de configurer la company.step dans la console. Cela pourrait donc faire oublier la validation, car ce n'est pas le cas. – Koby
Thx @Koby, qui a vraiment causé le problème, merci pour votre aide – Wastrox