Проблема добавления базовой ошибки во вложенный объект с помощью Active Admin - PullRequest
0 голосов
/ 09 октября 2018

У меня следующая проблема:

Я использую 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.

...