Rails before_destroy сообщение об ошибке доступно от родителя - PullRequest
2 голосов
/ 15 февраля 2012

Используя Rails 3, у меня есть модель аккаунта с адресами has_many.В модели адреса я определил метод обратного вызова before_destroy, который предотвращает уничтожение и добавляет ошибку к объекту адреса, если адрес связан с третьей моделью.Это прекрасно работает для предотвращения удаления учетной записи или адреса.

Моя проблема возникает при удалении учетной записи, так как я ожидаю, что ошибки объекта учетной записи содержат ошибку адреса, но это не так.Есть ли способ включить сообщение об ошибке адреса в ошибки учетной записи?

1 Ответ

0 голосов
/ 16 февраля 2012

Сообщения об ошибках обычно назначаются объекту модели, к которому они применяются.

Если вы действительно хотите, вы можете взять эти ошибки и вставить их в хеш ошибок вашей адресной модели:

class Account < ActiveRecord::Base
  before_destroy :check_for_destruction

  def check_for_destruction
    rejected = addresses.reject{|a| a.can_destroy?} # returns array of addresses that now have errors (they should return false)
    rejected.each do |address|
      address.errors.each do |e|
        errors.add_to_base(e)
      end
    end
  end
end

Нечто подобное должно работать, если вы определили метод Address#can_destroy?. (Отказ от ответственности: код не проверен, но должен дать вам хорошую отправную точку)

...