Что такое замена Rails 3 для ActiveRecord:: Errors?
Что такое замена 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
Это будет ActiveModel::Errors
. Вещи, такие как проверки и обработка ошибок, были перенесены на Active Model, чтобы предоставить общий API для всех ORM Railties, таких как Active Record, Data Mapper, Mongoid и т.д., Чтобы подключаться к Rails с помощью.
Похоже, что волшебный плагин должен сначала проверить ActiveModel, и если он существует, тогда включите обработку ошибок, а не ActiveRecord::Errors
. Тривиальное изменение.
Ответ 2
Попробуйте этот камень
http://rubygems.org/gems/wizardly_gt
Я только начинаю играть с волшебным, но выше, по крайней мере, похоже, совместим с Rails 3.
Ответ 3
Wizardly явно делает намного больше, но вы должны проверить validation_scopes, который я только что обновил для совместимости с Rails3. Вместо того, чтобы группировать объекты по атрибутам, он просто позволяет явно объявлять разные группы валидаций, создавая коллекции ошибок с именами. Внутренне это гораздо более простая реализация (тот же код обрабатывает Rails 2 и 3). Лично я считаю, что это более гибко, чем группировка по атрибуту (что, если атрибут должен иметь разные ограничения на разных этапах мастера, например?).