代码之家  ›  专栏  ›  技术社区  ›  Paul Schreiber Jon Lin

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

  •  11
  • Paul Schreiber Jon Lin  · 技术社区  · 14 年前

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

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

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

    在Rails 3.0.0rc中,您会得到一个名称错误:

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

    我想让 wizardly 发电机与轨道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
    
    3 回复  |  直到 13 年前
        1
  •  12
  •   Ryan Bigg Andrés Bonilla    14 年前

    那就是 ActiveModel::Errors . 诸如验证和错误处理之类的事情已经转移到活动模型中,为所有ORM Rails(如活动记录、数据映射器、MongoID等)提供一个通用的API,以便与Rails挂钩。

    向导插件似乎需要首先检查ActiveModel,如果存在,则包括错误处理,而不是 ActiveRecord::Errors . 小小的改变。

        2
  •  0
  •   Sanjay    14 年前

    试试这块宝石

    http://rubygems.org/gems/wizardly_gt

    我刚开始玩巫术,但上面的内容至少与Rails 3兼容。

        3
  •  0
  •   gtd    13 年前

    很明显,很神奇,但你应该看看 validation_scopes ,我刚刚为Rails3的兼容性进行了更新。与其按属性分组,不如通过创建错误的名称空间集合来显式声明不同的验证组。在内部,它是一个更简单的实现(相同的代码处理Rails2和3)。我个人认为这比按属性分组更灵活(例如,如果一个属性在向导的不同步骤中有不同的约束呢?).