2010-08-08 5 views
11

Quel est le remplacement de Rails 3 pour ActiveRecord :: Errors?Quel est le remplacement de Rails 3 pour ActiveRecord :: Errors?

Dans Rails 2.3.8, ceci est un objet:

>> ActiveRecord::Errors 
=> ActiveRecord::Errors 

Dans Rails 3.0.0rc, vous obtenez un NameError:

>> ActiveRecord::Errors 
NameError: uninitialized constant ActiveRecord::Errors 
from (irb):2 

Je suis en train de faire fonctionner le générateur wizardly avec Rails 3.

$ rails g wizardly_scaffold home 

Mais il échoue:

/Library/Ruby/Gems/1.8/gems/wizardly_gt-0.1.8.9/lib/validation_group.rb:150: 
uninitialized constant ActiveRecord::Errors (NameError) 

La ligne se réfère à ceci:

ActiveRecord::Errors.send :include, ValidationGroup::ActiveRecord::Errors 

Plus tôt dans le fichier, nous voyons:

module ValidationGroup 
    module ActiveRecord 
... 
    module Errors # included in ActiveRecord::Errors 
     def add_with_validation_group(attribute, msg = I18n.translate('activerecord.errors.messages')[:invalid], *args, &block) 
     add_error = @base.respond_to?(:should_validate?) ? (@base.should_validate?(attribute.to_sym) || attribute == :base) : true 
     add_without_validation_group(attribute, msg, *args, &block) if add_error 
     end 
... 
end 
+1

Ryan indique le bon remplacement ci-dessous. Cependant, cela ne suffit pas pour travailler avec sagesse (ou même pour faire fonctionner les échafaudages). Cela exigera un travail important. –

+0

Avez-vous fini par travailler avec Rails 3? – peku

+0

Je ne l'ai pas fait. J'ai essayé d'utiliser grouped_validation (qui fonctionne avec rails 3) au lieu de validationgroup, mais je ne l'ai jamais fait fonctionner. Je suis revenu aux rails 2.3.8 pour poursuivre le projet. Si vous le souhaitez, je peux déterrer ma version piratée de magicien pour que vous puissiez continuer à travailler dessus. –

Répondre

12

Ce serait ActiveModel::Errors. Des éléments tels que les validations et la gestion des erreurs ont été déplacés vers Active Model pour fournir une API commune à tous les Railties ORM tels que Active Record, Data Mapper, Mongoid etc.

Il semblerait que le plugin Wizard Wizard doive d'abord vérifier ActiveModel et s'il existe, alors inclure la gestion des erreurs plutôt que ActiveRecord::Errors. Un changement trivial.

0

Essayez ce petit bijou

http://rubygems.org/gems/wizardly_gt

Je viens seulement de commencer à jouer avec wizardly, mais ce qui précède au moins semble être compatible avec Rails 3.

+0

J'ai utilisé wizardly_gt et envoyé par courriel Gavin. Cela ne fonctionne pas avec Rails 3. –

0

Wizardly fait évidemment beaucoup plus, mais vous devriez vérifier validation_scopes, que j'ai juste mis à jour pour la compatibilité de Rails3. Plutôt que de regrouper des éléments par attributs, cela vous permet simplement de déclarer explicitement différents groupes de validations en créant des collections d'erreurs avec des espaces de noms. En interne, c'est une implémentation beaucoup plus simple (le même code gère les Rails 2 et 3). Personnellement, je trouve cela plus flexible que le regroupement par attribut (et si un attribut devait avoir différentes contraintes dans différentes étapes d'un assistant par exemple?).

Questions connexes