проверка активной записи - validates_associated - PullRequest
1 голос
/ 08 мая 2011

Мне неясно, что этот метод на самом деле делает или когда его использовать.

Допустим, у меня есть следующие модели:

Person < ...
  # id, name
  has_many :phone_numbers
end

PhoneNumber < ...
  # id, number
  belongs_to :person
  validates_length_of :number, :in => 9..12    
end

Когда я создаю телефонные номера для такого человека:

@person = Person.find(1)
@person.phone_numbers.build(:number => "123456")
@person.phone_numbers.build(:number => "12346789012")
@person.save

Сохранение не выполнено, поскольку первый номер недействителен. Это хорошая вещь для меня. Но чего я не понимаю, так это если уже проверяет связанные записи , что это за функция validates_associated?

1 Ответ

0 голосов
/ 06 августа 2015

Вы можете сделать has_many :phone_numbers, validate: false, и проверка, которую вы видите, не произойдет.

Зачем тогда использовать validates_associated? Возможно, вы захотите сделать validates_associated :phone_numbers, on: :create и пропустить проверку при обновлении (например, если в вашей базе данных уже были неверные данные и вы не хотите беспокоить существующих пользователей по этому поводу).

Есть и другие сценарии. has_one в соответствии с документацией - validate: false по умолчанию. Так что вам нужно validates_associated чтобы это изменить.

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