例えばこんなModelの関係があったとして
user.rb
class User < ApplicationRecord
has_many :telephone_books
accepts_nested_attributes_for :telephone_books
end
telephone_book.rb
class TelephoneBook < ApplicationRecord
validates :number, length: { minimum: 10 }
end
User.create!
時にtelephone_booksのtelでRecordInvalidが発生した時のみ特別な処理を行いたいとする。
record.errors.include?
を使って一応こんな感じで実現できた。
users_controller.rb
class UsersController < ApplicationController
def create
User.create!({telephone_books_attributes: [{tel: '0120'}]}) # length: { minimum: 10 } に引っかかる
rescue ActiveRecord::RecordInvalid => e
# telephone_books.tel のInvalidのみ処理する
notice_invalid_number(e) if e.record.errors.include?(:'telephone_books.tel')
end
end