什么是Rails 3替代ActiveRecord ::错误?
在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
答案 0 :(得分:12)
那是ActiveModel::Errors
。诸如验证和错误处理之类的事情已经转移到Active Model,为所有ORM Railties提供了一个通用API,例如Active Record,Data Mapper,Mongoid等,以便与Rails挂钩。
似乎向导插件需要首先检查ActiveModel,如果它存在,则在那里包含错误处理而不是ActiveRecord::Errors
。一个微不足道的变化。
答案 1 :(得分:0)
答案 2 :(得分:0)
向导显然做了很多,但你应该看看validation_scopes,我刚刚更新了Rails3的兼容性。它不是按属性对事物进行分组,而是让您通过创建命名空间的错误集合来显式声明不同的验证组。在内部,它是一个更简单的实现(相同的代码处理Rails 2和3)。我个人认为这比按属性分组更灵活(例如,如果属性在向导的不同步骤中应该有不同的约束,那该怎么办?)。