重新格式化对象以进行显示的最佳做法是什么?
我可以在视图中使用嵌套的.each语句执行以下操作,但这会导致大量的数据库查询。我假设有更好的方法。最好的做法是在控制器中重新组织和汇总我的条目,然后在视图中重复该对象。如果是这样,怎么样?使用地图?
我有一个名为JournalEntries(简称条目)的Rails 5对象。这些条目如下所示:
Date Company Account Amount
1/1/17 Foo A 00.01
1/1/17 Foo A 00.02
3/1/17 Foo B 00.03
3/1/17 Foo A 00.04
3/1/17 Foo A 00.05
3/1/17 Foo C 00.06
1/1/17 Bar A 00.07
2/1/17 Bar B 00.08
2/1/17 Bar B 00.09
当我显示这些条目时,我想按公司分组,然后按日期,然后按帐户,然后显示帐户金额的总和。以下是他们应该如何展示:
Company
Date
Account Total(sum)
Foo
1/1/17
A 00.03
3/1/17
A 00.09
B 00.03
C 00.06
Bar
1/1/17
A 00.07
2/1/17
B 00.17
更新:我担心的是,我有15家公司,每家公司都有3个帐户,每个帐户有10个或更多日记帐分录。当页面加载时,控制台显示大约200多个Select语句,因为在视图中我有3个嵌套的.each语句。
答案 0 :(得分:0)
您的问题实际上有两点:
db hits:您可以使用预先加载来阻止N + 1个查询。这可以通过使用#includes
来完成(这会将所有记录加载到内存中,因此如果您有大量的记录,则可能需要批量执行):
@companies = Company.includes(:accounts)
在哪里放置演示文稿逻辑:只需在视图中迭代@companies以获取简单的案例。但是如果您开始在视图中看到复杂的逻辑,或者您发现自己重复某些模式,则可以将其重构为帮助程序(如果跨模型有用)或演示者类(对特定模型/视图有用)。通过这种方式,您的视图将更加清晰,您也可以更轻松地进行单独测试。