Лучшая обработка ошибок, чем то, что я сейчас делаю? - PullRequest
2 голосов
/ 09 декабря 2011

Мне нужен объект ошибки для передачи ошибок между контроллерами и представлениями js для ответов ajax. Я хотел использовать ActiveModel :: Errors с тех пор, как я мог легко объединить ошибки от проверки модели до ошибок не модели. Но у меня были некоторые проблемы с использованием этого подхода.

Использование ActiveModel :: Errors.new (nil) Если я попытаюсь вызвать to_a () примерно так:

@errors = ActiveModel::Errors.new(nil)
@errors[:test] = "is a required field."
@errors.to_a().join("<br />")

Я получаю ошибку:

undefined method `human_attribute_name' for NilClass:Class

Он пытается вызвать human_attribute_name для ноля, который я передал в Errors.new, который должен быть моделью ActiveRecord.

Мне интересно, знает ли кто-нибудь о лучшем способе обработки ошибок или уже выбранный мной подход был превращен в какой-то драгоценный камень.

1 Ответ

3 голосов
/ 09 декабря 2011

Скорее всего, ваши проверки связаны с «чем-то», которое может быть инкапсулировано в модель - это просто не обязательно должна быть модель ActiveRecord.

Вы можете использовать проверки в любом простом объекте ruby, выполнив что-то вроде этого:

require 'active_model'

class Band
  include ActiveModel::Validations
  validates_presence_of :name
  attr_accessor :name
end

Тогда обычные подозреваемые будут работать нормально:

b = Band.new
b.valid?
#false
b.name = "Machine Head"
b.valid?
#true
...