如何在ActiveAdmin 0.5.0中为资源全局指定预先加载?

时间:2015-03-13 17:06:13

标签: ruby-on-rails ruby activeadmin

我在ActiveAdmin应用程序中向模型注册了一个页面,如下所示:

ActiveAdmin.register Report do
  menu parent: 'Administration', priority: 2

  scope ...
  scope ...

  filter ...
  filter ...

end

"报告" model / resource与其他模型有许多关联。为某些关联指定预先加载的最佳方法是什么?这些关联也适用于所有范围和过滤器的结果?

2 个答案:

答案 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这个答案都会很有用。