使用Active Admin向嵌套对象添加基本错误时出现问题

时间:2018-10-09 16:30:54

标签: activeadmin nested-attributes

我遇到了以下问题:

我正在使用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.errorscard.semantic_errors(其中card是嵌套表单的块变量)类似地,如果我向特定卡属性添加错误,则无法在视图中看到它。

我的问题是为什么会发生这种情况以及如何在表格中显示错误?

编辑:

经过更多探索之后,看来我的问题是在向对象添加错误之前已呈现页面。这就解释了为什么它们没有出现在视图中。

这样,我能够通过不调用super而是使用InheritedResources::Action#create中适合自己需求的代码版本来解决问题。

我猜哪个让我问是否有更好的方法来解决上述问题?也就是说:在呈现页面之前但使用super创建对象之后,向对象添加错误。

0 个答案:

没有答案