2010-08-08 7 views
11

¿Cuál es el reemplazo de Rails 3 para ActiveRecord :: Errors?¿Cuál es el reemplazo de Rails 3 para ActiveRecord :: Errors?

En Rails 2.3.8, esto es un objeto:

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

En Rails 3.0.0rc, se obtiene una NameError:

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

que estoy tratando de hacer funcionar el generador de wizardly con rieles 3.

$ rails g wizardly_scaffold home 

Pero no:

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

La línea se refiere a lo siguiente:

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

anteriormente en el archivo, vemos:

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 señala el reemplazo correcto a continuación. Sin embargo, esto no es suficiente para lograr un funcionamiento mágico (o incluso para que los andamios funcionen). Eso requerirá un trabajo significativo. –

+0

¿Eventualmente trabajaste de forma mágica con Rails 3? – peku

+0

No lo hice. Intenté usar grouped_validation (que funciona con rails 3) en lugar de validationgroup, pero nunca lo puse en marcha. Cambié de nuevo a los carriles 2.3.8 para continuar con el proyecto. Si quieres, puedo desenterrar mi versión pirateada de wizardly para que puedas seguir trabajando. –

Respuesta

12

Eso sería ActiveModel::Errors. Las cosas como las validaciones y el manejo de errores se trasladaron a Active Model para proporcionar una API común para todas las ORM Railties, como Active Record, Data Mapper, Mongoid, etc. para conectar con Rails.

Parece que el plugin wizardly primero debe buscar ActiveModel y si existe, entonces incluya el manejo de errores allí en lugar de ActiveRecord::Errors. Un cambio trivial.

0

Prueba esta joya

http://rubygems.org/gems/wizardly_gt

me han hecho más que empezar a jugar con wizardly, pero lo anterior, al menos, parece ser compatible con Rails 3.

+0

He usado wizardly_gt y enviado un correo electrónico a Gavin. No funciona con Rails 3. –

0

wizardly obviamente hace mucho más, pero Debería consultar validation_scopes, que acabo de actualizar para la compatibilidad de Rails3. En lugar de agrupar elementos por atributos, solo le permite declarar explícitamente diferentes grupos de validaciones mediante la creación de colecciones de errores en el espacio de nombres. Internamente es una implementación mucho más simple (el mismo código maneja Rails 2 y 3). Personalmente encuentro que esto es más flexible que la agrupación por atributo (¿y si un atributo tuviera diferentes restricciones en diferentes pasos de un asistente, por ejemplo?).

Cuestiones relacionadas