У меня есть меню с 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 из одного меню в другое.Кажется, что активная запись выполняет сложный поиск для menu_item на основе его идентификатора и идентификатора родительского меню ... и поскольку этот идентификатор родительского меню изменяется в новом ответе, я получаю:
Couldn't find MenuItem with ID=104 for Menu with ID=22
(Таким образом, элемент menu_item раньше принадлежал меню 21, но я перетащил его в пользовательский интерфейс в новую позицию под меню 22 ... но он все еще ищет его только из старой позиции)
Есть ли решение, в котором он будет видеть вложенный menu_item и найдет его на основе исключительно его идентификатора, а затем обновит поле родительского menu_id?