【发布时间】:2023-04-01 04:23:01
【问题描述】:
我正在学习 RoR,并且我正在尝试解决一个一般性的设计问题。我想就答案获得一些意见,以确保我遵循某种最佳做法。
我有一个由 3 个子部分组成的页面,我们称它们为 A、B 和 C。某些操作会导致其中的每一个都通过 AJAX 刷新,所以我希望它们每个都有一个控制器操作,允许任何它们单独呈现,没有页面镶边。
我现在的结构是使用一个控制器,它有 4 个动作:索引、A、B、C
A、B 和 C 中的每一个都使用 layout=>false 渲染其视图,因此我可以在需要时通过 AJAX 渲染该部分。然后,你有索引,它会渲染一些额外的东西以及 A、B 和 C 的视图。
基本上我想要的是 3 个子控制器,以及一个根据需要调用子控制器的主控制器。或者我认为这就是我想要的。我认为我不想要的是部分视图,因为我在控制器中为 A、B、C 中的每一个都做了一些设置,然后我必须在索引控制器和控制器中复制设置代码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#index,当我想要重新呈现每个小节的内容时访问 MyController#A 等。
这里的问题是,如果代码是这样的结构,访问 MyController#index 时会遇到 DoubleRender 错误。处理这种事情的正确方法是什么?随意破坏我在这里所做的任何假设,唯一的要求是页面具有三个部分,可以根据需要单独更新,而无需重新加载整个页面。
【问题讨论】:
标签: ruby-on-rails ruby model-view-controller design-patterns