什么是Rails 3替代ActiveRecord ::错误?

Pau*_*ber 11 ruby activerecord ruby-on-rails

什么是Rails 3替代ActiveRecord ::错误?

在Rails 2.3.8中,这是一个对象:

>> ActiveRecord::Errors
=> ActiveRecord::Errors
Run Code Online (Sandbox Code Playgroud)

在Rails 3.0.0rc中,您得到一个NameError:

>> ActiveRecord::Errors
NameError: uninitialized constant ActiveRecord::Errors
 from (irb):2
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Rails 3 使向导生成器工作.

$ rails g wizardly_scaffold home
Run Code Online (Sandbox Code Playgroud)

但它失败了:

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

它指的是这样的:

ActiveRecord::Errors.send :include, ValidationGroup::ActiveRecord::Errors
Run Code Online (Sandbox Code Playgroud)

在文件的前面,我们看到:

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
Run Code Online (Sandbox Code Playgroud)

Rya*_*igg 12

那就是ActiveModel::Errors.诸如验证和错误处理之类的事情已经转移到Active Model,为所有ORM Railties提供了一个通用API,例如Active Record,Data Mapper,Mongoid等,以便与Rails挂钩.

看来向导插件需要首先检查ActiveModel,如果它存在,那么在那里包含错误处理而不是ActiveRecord::Errors.一个微不足道的变化.