Валидировать модель Rails после сохранения? - PullRequest
3 голосов
/ 12 октября 2009

У меня есть модель с парой acceptpts_nested_attributes_for. Существует требование, чтобы при сохранении и перемещении у меня был хотя бы один из каждого из вложенных атрибутов.

Однако проверка выполняется перед сохранением, поэтому, когда я удаляю элемент и двигаюсь дальше, он пропускает его.

Как я могу проверить, что при сохранении у меня есть хотя бы один элемент каждого вложенного типа?

Ответы [ 3 ]

6 голосов
/ 12 октября 2009

Есть ошибка с accepts_nested_attributes_for . Это означает, что вы должны быть немного хитрее, когда дело доходит до проверок в родительской модели.

Вы можете использовать обратный вызов: after_save в каждой из ваших вложенных моделей, чтобы проверить, является ли она последней. Но если есть много вложенных ассоциаций, где вы хотите обеспечить хотя бы одну, это не очень СУХОЙ.

Это, однако, допустимый обходной путь для связанной ошибки:

class Whatever < ActiveRecord::Base
  :has_many => :association_a
  :has_many => :association_b

  def ensure_minimum_associations
    bad_associations =  [:association_a, :association_b].
      select{|assoc| self.send(assoc).all?{|a| a.marked_for_destruction?}}
    unless bad_associations.empty?
      bad_associations.each do |association|
        errors.add_to_base "Each #{self.class.name.downcase} must retain at least one #{association}"
      end
      return false
    end
  end
end
0 голосов
/ 12 октября 2009

Я полагаю, что вы ищете validates_associated

0 голосов
/ 12 октября 2009

Вы всегда можете вызвать valid? для модели, и она запустит проверку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...