Пользовательские ошибки проверки на вложенных моделях - PullRequest
4 голосов
/ 17 марта 2011
class Parent
  has_one :child
  accepts_nested_attributes_for :child
end
class Child
  belongs_to :parent
end

Используя форму вложенного объекта, мне нужно добавить дополнительные проверки в дочернюю модель.Они не всегда выполняются в Child, поэтому я не могу поместить их в метод validate в Child.Кажется целесообразным выполнить проверку в методе validate в Parent, но у меня возникают проблемы с добавлением сообщений об ошибках правильно.

Это работает:

class Parent
...
def validate
  errors[ :"child.fieldname" ] = "Don't be blank!"
end

Но мы теряем такие приятные вещи, какПодсветка I18n и CSS в поле ошибки.

Это не работает:

def validate
  errors.add :"child.fieldname", :blank
end

1 Ответ

1 голос
/ 05 ноября 2013

Вы должны хранить их в дочерней модели, так как это проверенная модель, однако вы можете установить условные выражения с помощью if: и unless:

class Order < ActiveRecord::Base
  validates :card_number, presence: true, if: :paid_with_card?

  def paid_with_card?
    payment_type == "card"
  end
end

. Вы можете сделать несколько вариаций, подробнеев документации по rails http://edgeguides.rubyonrails.org/active_record_validations.html#conditional-validation

Полагаю, вы могли бы добавить атрибут created_by для потомка и заставить Child выбирать, какие валидации использовать в зависимости от этого.Вы можете сделать это, как они делают в этом ответе: Rails, как установить временную переменную, которая не является полем базы данных

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