2010-08-08 56 views
11

什么是ActiveRecord :: Errors的Rails 3替代品?什么是Rails 3替代ActiveRecord :: Errors?

在Rails 2.3.8,这是一个对象:

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

在Rails 3.0.0rc,你会得到一个NameError:

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

我试图让wizardly发电机工作使用Rails 3

$ rails g wizardly_scaffold home 

但它失败:

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

它指的是这样的一行:

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

文件中的早些时候,我们看到:

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

瑞恩指出下面的正确替换。但是,这还不足以实现神奇的工作(甚至不能让脚手架工作)。这将需要大量的工作。 – 2010-08-10 06:05:55

+0

你最终得到了神奇的Rails 3工作吗? – peku 2010-08-24 12:36:47

+0

我没有。我尝试使用grouped_validation(它与rails 3一起使用)而不是验证组,但从未启动并运行。我转回到rails 2.3.8来继续这个项目。 如果你愿意,我可以挖掘我的黑客版本的巫术让你继续工作。 – 2010-08-24 18:15:37

回答

12

这会是ActiveModel::Errors。诸如验证和错误处理之类的东西已经转移到Active Model中,为所有ORM Railties(如Active Record,Data Mapper,Mongoid等)提供了一个通用API,以便与Rails挂钩。

它会出现向导插件需要首先检查ActiveModel,如果它存在,那么包括错误处理,而不是ActiveRecord::Errors。一个微不足道的变化。

0

试试这个宝石

http://rubygems.org/gems/wizardly_gt

我才刚刚开始wizardly玩,但上述至少似乎与导轨兼容3.

+0

我已经使用了wizardly_gt并通过电子邮件发送了Gavin。它不适用于Rails 3。 – 2010-09-01 22:38:17

0

Wizardly明明做了很多,但你应该检查出validation_scopes,我刚更新了Rails3的兼容性。通过创建命名空间的错误集合,而不是按属性对事物进行分组,而是让您明确地声明不同的验证组。在内部它是一个更简单的实现(相同的代码处理Rails 2和3)。就我个人而言,我发现这比按属性分组更灵活(例如,如果某个属性在向导的不同步骤中具有不同的约束,例如?)。

相关问题