我遇到了以下问题:
我正在使用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
创建对象之后,向对象添加错误。