Rails ассоциация с ошибками не является недействительной - PullRequest
0 голосов
/ 14 февраля 2020

Я обнаружил этот странный случай с добавлением ошибок в объект 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

У кого-нибудь есть идеи о том, что мне здесь не хватает?

1 Ответ

0 голосов
/ 14 февраля 2020

Разница между этими случаями заключается в атрибуте payment.customer, который может быть проверен на наличие (как минимум) и фактически присутствует во втором случае (тот, который возвращает true) и отсутствует в первом случае, следовательно, вы (вероятно) получаете ошибку проверки. Конечно, я не уверен, так как я не видел вашу модель. Но это должно быть что-то вроде этого.

...