在我的 Rails 应用程序中,我有一个Foo模型has_many Bar。我想编辑Bars控制器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 方法是什么?