【问题标题】:How do I create both a main and nested ActiveAdmin resource?如何创建主 ActiveAdmin 资源和嵌套 ActiveAdmin 资源?
【发布时间】:2013-10-16 16:36:02
【问题描述】:

我有一个订单资源,嵌套在用户:

ActiveAdmin.register Order do
  belongs_to :user
end

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

我现在还想创建一个订单资源,以获取整体视图。理想情况下我会这样做:

ActiveAdmin.register Order do
end

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

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

它似乎基于this,我应该可以使用as: 'all_orders',但实际上这似乎仍然影响同一个类,并最终得到/admin/users/:user_id/all_orders/...之类的路由

那么,如何在 URL 中使用 orders 来设置和独立操作两个订单资源?

【问题讨论】:

    标签: ruby-on-rails activeadmin


    【解决方案1】:

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

    ActiveAdmin.register Order do
      belongs_to :user, optional: true
    end
    
    # Routes at:
    #  /admin/orders/...
    #  /admin/users/:user_id/orders/...
    

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

    【讨论】:

    • 实际上不确定这是否符合我的需要,因为我遇到了一些尴尬的错误......理想情况下,我希望能够将only: :index 用于整个版本,然后链接到其余的用户特定版本。
    【解决方案2】:

    另一种解决方案,它非常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
    

    这在 URL 中仍然有 all_orders,但它是我能找到的最接近解决方案的方法。任何更优雅的东西都非常感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      相关资源
      最近更新 更多