Я изучаю RoR, и у меня есть общая проблема дизайна, которую я пытаюсь обойти. Я хочу получить некоторую информацию об ответе, чтобы убедиться, что я следую какой-то наилучшей практике.
У меня есть страница, которая состоит из 3 подразделов, давайте назовем их A, B и C. Некоторые действия заставляют каждое из них обновляться через AJAX, поэтому я хочу, чтобы у каждого из них было действие контроллера, которое позволяет любому из их визуализировать индивидуально, без страницы хрома.
Я структурировал это прямо сейчас с помощью контроллера, который имеет 4 действия: index, A, B, C
Каждый из A, B и C отображает свой вид с layout => false, поэтому я могу отображать только этот фрагмент через AJAX, когда это необходимо. Затем у вас есть индекс, который отображает некоторые дополнительные вещи вместе с представлениями A, B и C.
По сути, мне нужны 3 субконтроллера и главный контроллер, который вызывает субконтроллеры по мере необходимости. Или я думаю это то, что я хочу. То, что я не хочу, это частичные представления, потому что есть некоторые настройки, которые я делаю в контроллере для каждого из A, B, C, и мне тогда пришлось бы дублировать код установки как в контроллере для индекса, так и в контроллере для А, В, С.
Код, который я имею в виду, выглядит примерно так:
my_controller.rb:
class MyController < ApplicationController
def index
@aOutput = A
@bOutput = B
@cOutput = C
render //can use @aOutput, @bOutput, @cOutput in the view
end
def A
render :layout => false
end
def B
render :layout => false
end
def C
render :layout => false
end
end
Это позволило бы мне теперь получить доступ к индексу MyController #, когда мне нужна полная страница, и к MyController # A и т. Д., Когда я хочу перерисовать содержимое каждого подраздела.
Проблема здесь в том, что если код структурирован следующим образом, вы столкнетесь с ошибками DoubleRender при доступе к индексу MyController #. Как правильно подходить к такого рода вещам? Не стесняйтесь взрывать любые предположения, которые я сделал здесь, единственное требование - это страница с тремя разделами, которые можно обновлять по мере необходимости по отдельности без перезагрузки всей страницы.