Ruby on rails 如何在MVC中表示跨模型信息?

Ruby on rails 如何在MVC中表示跨模型信息?,ruby-on-rails,model-view-controller,design-patterns,Ruby On Rails,Model View Controller,Design Patterns,我有一个使用MVC构建的应用程序,它生成一个视图,该视图跨多个模型提供摘要信息。此外,还对不同的数据集进行了一些计算 没有一个清晰的单一模型(至少映射到一个表)可以作为这一点的起点,因此从控制器中的贡献模型中提取各种摘要,传递到视图中,并在那里执行计算 但这看起来很肮脏。但是控制器应该是轻量级的,不是吗?而且业务逻辑不应该出现在视图中,因为我现在已经看到了 那么这些信息应该在哪里收集呢?一个不映射到表的新模型?库函数/模块?还是别的什么 (虽然我认为这主要是一个架构/模式问题,但我在Rails、

我有一个使用MVC构建的应用程序,它生成一个视图,该视图跨多个模型提供摘要信息。此外,还对不同的数据集进行了一些计算

没有一个清晰的单一模型(至少映射到一个表)可以作为这一点的起点,因此从控制器中的贡献模型中提取各种摘要,传递到视图中,并在那里执行计算

但这看起来很肮脏。但是控制器应该是轻量级的,不是吗?而且业务逻辑不应该出现在视图中,因为我现在已经看到了

那么这些信息应该在哪里收集呢?一个不映射到表的新模型?库函数/模块?还是别的什么

(虽然我认为这主要是一个架构/模式问题,但我在Rails、FWIW工作。)


编辑:各方面的答案都很好,而且达成了很多共识,这让人放心。我“接受”了我所做的回答,以保持与铁路乘客的联系处于首位。我在看火车时落后了——我将竭尽全力纠正这一点

控制器不必那么轻量级


但是,如果您有一些只依赖于模型的计算,那么您可能只需要一些模型包装器来执行计算。然后,您可以将其放入视图的API中,以便视图获得最终结果。

为什么不创建一个不继承并执行那里的逻辑的模型(想想Agile中的Cart类…With Rails)。

正如Brian所说,您可以创建另一个模型来整理需要执行的工作。关于如何做这类事情有很多问题


HTH

您不希望逻辑出现在视图中。但是,您可以自由创建数据库视图。除了,不要在数据库端创建它,而是将其创建为新模型。这将使您能够在一个地方执行计算和实际逻辑。尝试保持视图同步的痛苦与创建新模型的一次性“痛苦”。。。我投票支持新的模型。

控制器不必映射到特定的模型或视图。您的模型不必将一对一映射到数据库表。这就是框架的想法。分离所有可以单独测试的关注点