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


什么是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

5768
2017-08-08 04:44


起源

Ryan在下面指出正确的替换。然而,这还不足以让巫师工作(甚至让脚手架工作)。这需要大量的工作。 - Paul Schreiber
你最终是否正在使用Rails 3? - peku
我没有。我尝试使用grouped_validation(使用rails 3)而不是验证组,但从未启动并运行。我切换回rails 2.3.8继续进行项目。如果您愿意,我可以挖掘我的黑客版本,以便您继续工作。 - Paul Schreiber


答案:


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

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


12
2017-08-08 05:48





试试这个宝石

http://rubygems.org/gems/wizardly_gt

我刚刚开始玩精灵,但上面至少似乎与Rails 3兼容。


0
2017-09-01 03:28



我使用了wizardly_gt并通过电子邮件发送了Gavin。它不适用于Rails 3。 - Paul Schreiber


巫师显然做得更多,但你应该看看 validation_scopes,我刚刚更新了Rails3的兼容性。它不是按属性对事物进行分组,而是让您通过创建命名空间的错误集合来显式声明不同的验证组。在内部,它是一个更简单的实现(相同的代码处理Rails 2和3)。我个人认为这比按属性分组更灵活(例如,如果属性在向导的不同步骤中应该有不同的约束,那该怎么办?)。


0
2018-02-24 20:25