【发布时间】:2012-05-05 13:26:11
【问题描述】:
一个用户有_many交易。我有活动管理员当前设置为使用 admin/transactions.rb 中的 belongs_to :user 将事务嵌套在基本 CRUD 的用户下。然而,我还需要一个顶级的交易视图,显示跨用户的交易记录子集。我怎样才能完成第二部分?
【问题讨论】:
一个用户有_many交易。我有活动管理员当前设置为使用 admin/transactions.rb 中的 belongs_to :user 将事务嵌套在基本 CRUD 的用户下。然而,我还需要一个顶级的交易视图,显示跨用户的交易记录子集。我怎样才能完成第二部分?
【问题讨论】:
我认为现在最好的方法是传入“可选”选项:
ActiveAdmin.register Transactions do
belongs_to :user, :optional => true
...
end
这样,您可以从主导航菜单以及特定用户下的嵌套视图访问所有事务。
如果想了解更多,可以参考下面的源码:
https://github.com/gregbell/active_admin/blob/0.4.x-stable/lib/active_admin/resource.rb
第 131 行
def include_in_menu?
super && !(belongs_to? && !belongs_to_config.optional?)
end
【讨论】:
您需要创建两个 Active Admin 资源,它们都引用需要嵌套和非嵌套路由的同一个 Active Record 模型。
父资源:
ActiveAdmin.register ParentClass do
end
嵌套资源:
ActiveAdmin.register ChildClass do
belongs_to :parent_class
end
未嵌套的资源:
ActiveAdmin.register ChildClass, :as => "All Children" do
end
您现在可以通过“所有子级”选项卡直接访问 ChildClass,而不会收到 ParentClass 丢失的错误,同时仍然可以享受从 ParentClass 对 ChildClass 的嵌套访问。
【讨论】: