我在ActiveAdmin应用程序中向模型注册了一个页面,如下所示:
ActiveAdmin.register Report do
menu parent: 'Administration', priority: 2
scope ...
scope ...
filter ...
filter ...
end
"报告" model / resource与其他模型有许多关联。为某些关联指定预先加载的最佳方法是什么?这些关联也适用于所有范围和过滤器的结果?
答案 0 :(得分:3)
最好的方法是使用内置功能:)
ActiveAdmin.register Report do
includes :users, :apples, :rhinos
...
end
您可以在https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md
了解有关资源自定义的更多信息答案 1 :(得分:1)
你可以覆盖scoped_collection,如
ActiveAdmin.register Report do
menu parent: 'Administration', priority: 2
controller do
def scoped_collection
Report.includes(:users, ....)
end
end
end
UPD,完全同意@TimoSchilling评论。
如果你想覆盖scoped_collection
使用super
然后追加方法,这样就不会忽略InheritedResource的end_of_association_chain
。
所以最后的代码是
ActiveAdmin.register Report do
menu parent: 'Administration', priority: 2
controller do
def scoped_collection
super.includes(:users, ....)
# or
super.eager_load(:users, ....)
end
end
end
然而,在大多数情况下https://stackoverflow.com/a/29038410/246544#29038410这个答案都会很有用。