ActiveAdmin 未触发 after_destroy 回调

问题描述 投票:0回答:3

我使用 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

我认为有更好的方法来处理这个问题......

ruby-on-rails ruby-on-rails-4 callback activeadmin
3个回答
0
投票

Active Admin 也有自己的回调,因此您可以在 admin 文件夹中的organizations.rb 文件中使用如下所示的回调。

  after_destroy do |organization|
    # do your stuff
  end

我之前为 before_save 和 after_save 完成了它,我不确定它是否可用于 after_destroy ,您可以查看 here 有关活动管理回调的更多信息。


0
投票

是的,您可以尝试管理文件中的

after_destory
方法,例如

 after_destroy do |organization|
    organization.organization_collection_relations.each(&:do_something)
  end

0
投票

我遇到了同样的问题,我也做了同样的事情 例如`

 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
© www.soinside.com 2019 - 2024. All rights reserved.