我在Rails初始化程序文件中包含以下代码,以针对我所有的管理资源禁用特定的过滤器:
ActiveAdmin.application.namespaces[:admin].resources.values.each do |resource|
resource.remove_filter :some_common_filter if resource.is_a? ActiveAdmin::Resource
end
但是在程序执行的这一刻,资源的集合仍然是空的(resources.count == 0),因此没有完成对#remove_filter的调用。
在 ActiveAdmin.setup do | config | 块中发生了同样的情况,并使用 config 代替了 ActiveAdmin.application 。
稍后在控制台上,我可以访问所有管理资源,但不能在初始化程序中访问。
答案 0 :(得分:0)
只需使用after_load
钩子找到解决方案
ActiveAdmin.after_load do |app|
app.namespaces.each do |name, _namespace|
name.resources.values.each do |resource|
resource.remove_filter :my_common_filter if resource.is_a?(ActiveAdmin::Resource) && resource.filters.include?(:my_common_filter)
end
end
结束