2016-08-15 64 views
0

如果我有三个资源, 当我在一个资源声明belongs_to的,它工作得很好Rails的主动管理路径消失

ActiveAdmin.register Order 
ActiveAdmin.register Material do 
    belongs_to :order 
end 

这会产生以下

batch_action_admin_order_materials POST  /admin/orders/:order_id/materials/batch_action(.:format) admin/materials#batch_action 
      admin_order_materials GET  /admin/orders/:order_id/materials(.:format)    admin/materials#index 
            POST  /admin/orders/:order_id/materials(.:format)    admin/materials#create 
      new_admin_order_material GET  /admin/orders/:order_id/materials/new(.:format)   admin/materials#new 
     edit_admin_order_material GET  /admin/orders/:order_id/materials/:id/edit(.:format)  admin/materials#edit 
       admin_order_material GET  /admin/orders/:order_id/materials/:id(.:format)   admin/materials#show 
            PATCH  /admin/orders/:order_id/materials/:id(.:format)   admin/materials#update 
            PUT  /admin/orders/:order_id/materials/:id(.:format)   admin/materials#update 
            DELETE  /admin/orders/:order_id/materials/:id(.:format)   admin/materials#destroy 

但是,当路径我添加了设置属于另一个资源的相同资源,上面的路径全部消失了,取而代之的是生成下面的路径

ActiveAdmin.register Supplier 
ActiveAdmin.register Material do 
    belongs_to :supplier 
end 



batch_action_admin_supplier_materials POST  /admin/suppliers/:supplier_id/materials/batch_action(.:format) admin/materials#batch_action 
      admin_supplier_materials GET  /admin/suppliers/:supplier_id/materials(.:format)    admin/materials#index 
             POST  /admin/suppliers/:supplier_id/materials(.:format)    admin/materials#create 
      new_admin_supplier_material GET  /admin/suppliers/:supplier_id/materials/new(.:format)   admin/materials#new 
     edit_admin_supplier_material GET  /admin/suppliers/:supplier_id/materials/:id/edit(.:format)  admin/materials#edit 
       admin_supplier_material GET  /admin/suppliers/:supplier_id/materials/:id(.:format)   admin/materials#show 
             PATCH  /admin/suppliers/:supplier_id/materials/:id(.:format)   admin/materials#update 
             PUT  /admin/suppliers/:supplier_id/materials/:id(.:format)   admin/materials#update 
             DELETE  /admin/suppliers/:supplier_id/materials/:id(.:format)   admin/materials#destroy 

我希望有这两种路径,不希望它们消失。 任何人都可以帮忙,谢谢!

+0

嗨,欢迎来到Stack Overflow。很难弄清楚你的意思...你可以请扩展一下“不好用”吗?您能否解释一下:您观察到的情况以及您期望看到的结果,以及您收到的任何实际的错误信息? –

回答

0

好的,所以问题是你写了ActiveAdmin.register Material两次 - 第二个覆盖第一个。

(也不应该使用的belongs_to的线小写)

而不是写两次的,既belongs_to内一次把它写如:

ActiveAdmin.register Order 
ActiveAdmin.register Supplier 
ActiveAdmin.register Material do 
    belongs_to :order 
    belongs_to :supplier 
end 
+0

感谢您的帮助。我在order.rb中写了第一个'ActiveAdmin.register Material',在supplier.rb中写了第二个。那么,我应该把你提到的代码放在哪里? PS:订单和材料之间的关系是一对多关系,供应商和材料也是一对多关系。订单和材料之间没有直接关系。 –

+0

我会把第一行按顺序,第二行在供应商,其余在一个新的文件称为材料 –

+0

您好Taryn,再次感谢。我试过你的解决方案,仍然有两个问题。其一,在将'ActiveAdmin.register Material'移出到material.rb之后。该页面在管理::订单#索引中显示错误“ActionController :: UrlGenerationError”无路径匹配{:action =>“index”,:controller =>“admin/materials”}缺少必需的键:[:order_id]' '举起ActionController :: UrlGenerationError,消息' –

0

可能是你可以尝试重新命名资源:Rename Resource

所以你material.rb将conatin:

ActiveAdmin.register Material do 
    belongs_to :order 
end 

您可以创建新的文件supplier_materials.rb其中将包含:

ActiveAdmin.register Material, as: "Supplier Material" do 
    belongs_to :supplier 
end 

这会工作作为两个独立的资源。