我使用 ActiveAdmin 作为我的应用程序的后台,我有这三个模型:
class Organization
has_many :organization_collection_relations
has_many :collections, through: :organization_collection_relations
end
class OrganizationCollectionRelation
belongs_to :organization
belongs_to :collection
after_destroy :do_something
end
class Collection
has_many :organization_collection_relations
has_many :organizations, through: :organization_collection_relations
end
在我的编辑页面中,我有
Organization
和 f.input :collections
。当我编辑和组织时,例如删除所有集合,问题就出现了。 after_destroy
回调方法do_something
没有被触发。因此,我必须在活动管理文件的控制器部分中采取解决方法。
controller do
def update
resource = Organization.find(params[:id])
former_ids = resource.collection_ids
super
new_ids = resource.reload.collection_ids
# my logic here
end
end
我认为有更好的方法来处理这个问题......
Active Admin 也有自己的回调,因此您可以在 admin 文件夹中的organizations.rb 文件中使用如下所示的回调。
after_destroy do |organization|
# do your stuff
end
我之前为 before_save 和 after_save 完成了它,我不确定它是否可用于 after_destroy ,您可以查看 here 有关活动管理回调的更多信息。
是的,您可以尝试管理文件中的
after_destory
方法,例如
after_destroy do |organization|
organization.organization_collection_relations.each(&:do_something)
end
我遇到了同样的问题,我也做了同样的事情 例如`
after_destroy do |admin_file|
account_id = admin_file.try(:account_id)
Model1.do_something_method(account_id)
end
它对我不起作用,因为我在我的项目中使用公寓。因此,为了使其工作,我所做的就是在调用方法执行操作之前使用公寓开关
after_destroy do |admin_file|
#here admin_file is independent to apartment
account_id = admin_file.try(:account_id)
Apartment::Tenant.switch!("account_#{account_id}")
#Model1 is depended on apartment
Model1.do_something_method(account_id)
end