以两种不同的方式渲染相同的东西的最佳实践是什么?

时间:2011-02-23 20:21:04

标签: ruby-on-rails ruby model-view-controller controller dry

我得到了一个 - 说Actor - 模型以及带有经典show动作的相对控制器,它显示了演员的完整列表以及有关他们的各种信息(例如他们已加星标的电影,等等)。

现在,我想要检索我的show操作所需的完全相同的信息,但要以不同的风格显示它们,因为这部分 - 比如说_search_results - 用于创建一个小的“搜索为你”类型的框。

想象一下show操作作为Finder窗口显示文件夹和文件,将我的部分视为在Spotlight上搜索内容时出现的下拉列表。

当然我希望尽可能保持DRY,所以我想知道这样做的最佳做法是什么,而我的actors_controller几乎不会重复代码,因为部分所需的信息是与show操作已为show视图生成的完全相同。

感谢。

编辑(NB)当然我希望从控制器内部渲染部分,因为我不希望我的所有应用程序布局都显示在搜索结果框中!

2 个答案:

答案 0 :(得分:2)

关于这一点的经典建议是将信息组件粘贴在模型中,因此可以通过多个控制器操作访问它而无需重复。命名范围等使这很容易做到。

http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model

答案 1 :(得分:0)

您想要使用Presenter。它是一个类,它封装了为您正在使用的模板/部分准备数据所需的所有逻辑。然后,您可以在渲染模板之前在控制器中创建该演示者的实例。以下是关于Presenter模式以及何时使用它的好文章。

http://kpumuk.info/ruby-on-rails/simplifying-your-ruby-on-rails-code/