我有带有menu_items的菜单,这些menu_items可以打开更多菜单。因此,您可以看到打开更深层菜单的菜单项的嵌套层次结构。问题是,但是GUI是拖放式的,我希望我的用户能够将菜单项从一个菜单拖动到另一个菜单。
我的数据结构是
menu.rb
has_many: menu_items
has_one :menu_item, foreign_key: :submenu_id, dependent: :nullify
accepts_nested_attributes_for :menu_items, allow_destroy: true
menu_item.rb
belongs_to :menu
belongs_to :submenu, class_name: 'Menu'
accepts_nested_attributes_for :submenu, allow_destroy: true
有了这个,我可以使menu_item属于一个菜单并指向一个新菜单。在我的menu_params中给我这个:
def menu_params
params.require(:menu).permit(
:id,
:title,
:menu_type,
menu_items_attributes: [
:id,
:menu_id,
:order,
:title,
:_destroy,
submenu_attributes: [
:id,
:title,
:menu_type,
menu_items_attributes: [
:id,
:menu_id,
:order,
:title,
:active,
:_destroy,
submenu_attributes: [
:id,
:title,
:menu_type,
menu_items_attributes: [
:id,
:menu_id,
:order,
:title,
:active,
:_destroy,
]
]
]
]
]
)
end
现在,在创建新的menu_item或更改其顺序时,一切正常。我遇到的问题是,如果我将menu_item从一个菜单移动到另一个菜单。似乎活动记录会根据其ID和父菜单ID来复合搜索menu_item。由于该父菜单ID在新响应中已更改,因此我得到:
Couldn't find MenuItem with ID=104 for Menu with ID=22
(因此menu_item以前属于菜单21,但我已将其拖到UI中,位于菜单22下的新位置。但是它仍然仅从旧位置查找)
是否有解决方案,它将看到嵌套的menu_item并仅根据其ID找到它,然后更新父menu_id的字段?