У меня следующая проблема:
Я использую Active Admin 1.2.1 и пытаюсь добавить базовую ошибку во вложенный атрибут.Хотя я вижу, что он добавляется до визуализации формы, когда я проверяю объект ошибки в представлении, массив базовой ошибки пуст.
У меня есть следующие ассоциации:
class Client < ApplicationRecord
has_one :card
accepts_nested_attributes_for :card
end
class Card < ApplicationRecord
belongs_to :client
end
Иследующее (псевдокод) в app / admin / clients.rb
ActiveAdmin.register Client do
...
controller do
def create
call_third_party_to_validate_card
super
if issues_validating_card
resource.card.errors.add(:base, errors_from_third_party)
end
end
end
end
Если я добавлю оператор отладчика после явного добавления ошибок, я вижу, что они существуют.Однако, когда я проверяю ошибки карты в представлении, это пустой массив.Это включает использование resource.card.errors
и card.semantic_errors
(где card
- блочная переменная для вложенной формы) Аналогично, если я добавляю ошибку к определенному атрибуту карты, я не вижу ее в представлении.
Мои вопросы: почему это происходит, и как я могу отобразить ошибки в форме?
Редактировать:
После дополнительных исследований мне кажется, что проблема заключается в том, что страница отображается до того, как ядобавление ошибок к объекту.Это объясняет, почему они не отображаются в представлении.
Таким образом, я смог исправить свою проблему, не вызывая super и вместо этого используя версию кода в InheritedResources::Action#create
, которая соответствует моим потребностям.
Что, я думаю, заставляет меня спросить, есть ли лучший способ подойти к моей проблеме выше?То есть: добавление ошибок к объекту до отображения страницы, но после создания объекта с помощью super
.