2010-08-08 11 views
11

Qual è la sostituzione di Rails 3 per ActiveRecord :: Errori?Qual è la sostituzione di Rails 3 per ActiveRecord :: Errori?

In Rails 2.3.8, questo è un oggetto:

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

In Rails 3.0.0rc, si ottiene un NameError:

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

Sto cercando di far funzionare il generatore wizardly con Rails 3.

$ rails g wizardly_scaffold home 

Ma fallisce:

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

La linea si riferisce a questo è:

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

In precedenza nel file, vediamo:

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 indica la sostituzione corretta sotto. Tuttavia, questo non è sufficiente per lavorare magicamente (o persino per far funzionare gli scaffold). Ciò richiederà un lavoro significativo. –

+0

Alla fine hai lavorato magicamente con Rails 3? – peku

+0

Non l'ho fatto. Ho provato a utilizzare grouped_validation (che funziona con rails 3) invece di validationgroup, ma non l'ho mai installato e funzionante. Sono tornato alle guide 2.3.8 per procedere con il progetto. Se vuoi, posso recuperare la mia versione hackerata di maghi per poter continuare a lavorare. –

risposta

12

Sarebbe ActiveModel::Errors. Cose come le convalide e la gestione degli errori sono state spostate su Active Model per fornire un'API comune per tutte le Ferrovie ORM come Active Record, Data Mapper, Mongoid ecc. Da collegare a Rails con.

Sembrerebbe che il plug-in magistrale debba prima controllare ActiveModel e se esiste, quindi includere l'errore che gestisce lì anziché ActiveRecord::Errors. Un cambiamento banale.

0

Provate questo gioiello

http://rubygems.org/gems/wizardly_gt

ho appena iniziare a giocare con wizardly, ma quanto sopra, almeno sembra essere compatibile con Rails 3.

+0

Ho usato wizardly_gt e inviato via email a Gavin. Non funziona con Rails 3. –

0

wizardly ovviamente fa molto di più, ma dovresti controllare validation_scopes, che ho appena aggiornato per la compatibilità con Rails3. Anziché raggruppare le cose in base agli attributi, consente semplicemente di dichiarare in modo esplicito diversi gruppi di convalide creando raccolte di errori con nomi diversi. Internamente è un'implementazione molto più semplice (lo stesso codice gestisce Rails 2 e 3). Personalmente trovo che questo sia più flessibile del raggruppamento per attributo (e se un attributo dovesse avere vincoli diversi in diversi passaggi di un wizard, per esempio?).

Problemi correlati