在我的 Rails 应用程序中,我有一个Foo
模型has_many
Bar
。我想编辑Bar
s控制器show
视图中Foo
的 s 。另外,我不想在每次编辑Bar
.
为此,我正在使用 AJAX。控制器有Bar
两个视图 -show
和edit
. bar#show
有一个编辑按钮,并且两个Bar
视图都使用 AJAX 来执行 HTTP 请求,然后替换包含表示该特定Bar
对象Foo
的HTML 标记的内容,而不是重新加载整个页面show
。
渲染时foo#show
,我不想为每个Bar
对象执行 HTTP 请求。此外,Bar
的控制器方法需要Bar
从数据库中获取记录——这是我不想在 中做的事情foo#show
,因为我可以用一个查询加载所有这些,这比单独加载每个查询要快得多。
所以,我所做的就是将Bar
's 的视图设为局部视图,而不是普通视图。这样,我可以从控制器和另一个视图中渲染它们。
现在,问题是除了Bar
从数据库加载记录之外,这些视图还需要更多的准备工作,并且与加载记录不同 - 无论部分是从控制器还是从另一个视图呈现,这些准备工作都需要完成。
我现在正在做的是在 partial's 的开头有一个大约 10 行的红宝石块erb
,并在那里做准备。虽然这样可行,但我意识到这是一个糟糕的设计——这种准备应该在控制器中完成,而不是在视图中。更糟糕的是 - 有时,show
部分的准备代码可以决定edit
需要渲染部分,所以我需要从show
部分调用另一个部分渲染 - 再次,应该在另一个地方完成的事情。
但是,我只是不知道将代码放在哪里。我想过把它作为一个视图助手,但是视图助手应该是从视图中调用的,我还需要从控制器中调用它。
那么,解决这个问题的 RoR 方法是什么?