решение, основанное на сеансах
С такими глубоко вложенными моделями блока выбора на внешнем интерфейсе будет недостаточно ... Предполагая, что вы можете создать current_house, идентификатор которого находится в сеансе (точно так же, какcurrent_user работает).
Как только у вас есть current_house, добавьте различные элементы, перейдя к представлению списка элементов и нажав на ссылку add_to:
# house_controller.rb
def add_to
current_house.polymorphic_items << Kitchen.find(params[:id])
redirect_to :back
end
Но есть много подходов к этому решению на основе сеансов, которые сортируютреализует корзину / систему заказов.Возможно, вы захотите добавить current_item, чтобы добавить материал в каждый лист вашего дерева или комнаты вашего дома.
EG после нажатия на кухню, которую вы только что добавили:
before_filter :set_current_item
def add_to
current_item.windows << Window.find(id)
end
current_item полиморфный: гостиная, ванная и т. Д. Но то, как вы реализуете это, зависит именно от вашей доменной модели...
Как правило, в отношении вложенных форм я следую указаниям рельсов для маршрутов: не углубляйтесь глубже, чем на один уровень, иначе вы окажетесь в беспорядке.