我使用belongs_to
将MenuItem嵌套在Menu下如果我没有声明索引块(活动管理员自动执行它),这很有效但是如果我声明我自己的块,它会显示所有菜单的所有MenuItem。
如何告诉我的块尊重嵌套资源?
更新 - 我认为这与https://github.com/nebirhos/activeadmin-sortable-tree而不是activeadmin核心有关。
所以我想问题就变成了: 是否可以使用嵌套资源的可排序树?
ActiveAdmin.register MenuItem do
config.filters = false
config.paginate = false
belongs_to :menu
sortable tree: true
permit_params :title, :url, :menu_id
index as: :sortable do
label "Title" do |menu_item|
link_to menu_item.title, edit_admin_menu_menu_item_path( menu_item.menu, menu_item )
end
actions defaults: false do |menu_item|
link_to "Delete", admin_menu_menu_item_path( menu_item.menu, menu_item ), method: "delete", confirm: "Are you sure?"
end
end
form do |f|
f.inputs "Details" do
f.input :title
f.input :url
f.input :menu_id, :as => :hidden
end
f.actions
end
end
答案 0 :(得分:1)
问题是由于ActiveAdmin可排序树在层次结构中查找根的方法。默认情况下,无论嵌套如何,可排序树都会查找指定模型的所有根。可以通过向proc
选项提供:roots_collection
来自定义此行为:
ActiveAdmin.register MenuItem do
belongs_to :menu
sortable tree: true,
# Only display the parent menu's roots
roots_collection: proc { parent.menu_items.roots }
end
从ActiveAdmin Sortable Tree #30上的帖子中复制的答案。