如何创建主要和嵌套的ActiveAdmin资源?

时间:2013-10-09 10:51:10

标签: ruby-on-rails activeadmin

我有一个Order资源,嵌套在User:

ActiveAdmin.register Order do
  belongs_to :user
end

# Routes at:
#  /admin/users/:user_id/orders/...

我现在还想为整体视图创建一个Order资源。理想情况下,我只是这样做:

ActiveAdmin.register Order do
end

# Routes at:
#  /admin/orders/...

但是这不起作用,因为它创建了相同的底层类(我假设)。

它基于this显示我应该可以使用as: 'all_orders',但实际上这似乎仍会影响同一个类,最终会出现像/admin/users/:user_id/all_orders/...这样的路由

那么,如何在URL中使用orders设置和独立运行订单资源?

2 个答案:

答案 0 :(得分:0)

我认为这可能是最好的选择,详见here

ActiveAdmin.register Order do
  belongs_to :user, optional: true
end

# Routes at:
#  /admin/orders/...
#  /admin/users/:user_id/orders/...

我希望可以选择为两者做不同的事情,因此仍然可以理解它们可以单独定义的选项。如果没有更好的选择,我会在这里留下这个答案,因为它是合理的。

答案 1 :(得分:0)

另一种解决方案,非常hacky但提供我需要的是:

# models/order.rb
class Order < ActiveRecord::Base
  belongs_to :user
end

# models/order_alias.rb
class OrderAlias < Order
end

# admin/user/order.rb
ActiveAdmin.register Order do
  belongs_to :user
end

# admin/order.rb
ActiveAdmin.register OrderAlias, as: 'AllOrder' do
  menu label: 'Orders'
  index title: 'Orders' do
    # ...
  end
end

网址中仍有all_orders,但它最接近我能找到的解决方案。任何更优雅的东西都非常赞赏。