Я обнаружил этот странный случай с добавлением ошибок в объект ActiveRecord, созданный из ассоциации. Этот случай работает как ожидалось:
payment = Payment.new
# #<Payment:0x00007f996c3b8848 ...>
payment.errors.add(:base, 'some message')
payment.valid?
# false
Тем не менее, если я пытаюсь сделать то же самое с объектом, созданным из ассоциации, ошибка не блокирует проверку:
payment = Customer.payments.build
# #<Payment:0x00007f994d318538 ...>
payment.valid?
# true
payment.errors.add(:base, 'error')
# ["error"]
payment.errors
# #<ActiveModel::Errors:0x00007f8d2c00a5a8
@base= #<Payment:0x00007f8d20dcb680 id: nil>,
@details={:base=>[{:error=>"error"}]},
@messages={:base=>["error"]}>
## Yet, agonizingly --
payment.valid?
# true
У кого-нибудь есть идеи о том, что мне здесь не хватает?