Как определить, какая из связанных моделей не прошла проверку ActiveRecord? - PullRequest
1 голос
/ 01 июля 2019

Скажите, у меня есть следующие модели:

class Race < ApplicationRecord
  has_many :horses
end

class Horse < ApplicationRecord
  belongs_to :race
  validates :name, presence: true
end

Теперь с помощью моего REST API я создаю объект Race и связываю несколько лошадей. Одна из лошадей не проходит проверку, что добавляет ошибку.

Добавление ошибки означает добавление записей в errors.details и errors.messages, где errors - поле модели Race. Оба эти поля являются хешами, с ключом horses.name и подробностями об ошибках и сообщениях об ошибках соответственно.

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

1 Ответ

0 голосов
/ 01 июля 2019
race = Race.create race_params
race.errors.messages
=> {'horses.name' => ['Can't be blank']}
race.horces[0].errors.messages
=> {'name' => ['Can't be blank']}

чтобы получить записи с ошибкой, просто отфильтруйте race.horses

with_error = race.horses.select{|h| h.errors.messages.present?}
index = race.horses.index( with_error[0] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...