Rails重新格式化对象以进行显示的最佳实践

时间:2017-09-18 21:50:47

标签: ruby-on-rails

重新格式化对象以进行显示的最佳做法是什么?

我可以在视图中使用嵌套的.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语句。

1 个答案:

答案 0 :(得分:0)

您的问题实际上有两点:

  1. db hits:您可以使用预先加载来阻止N + 1个查询。这可以通过使用#includes来完成(这会将所有记录加载到内存中,因此如果您有大量的记录,则可能需要批量执行):

    @companies = Company.includes(:accounts)

  2. 在哪里放置演示文稿逻辑:只需在视图中迭代@companies以获取简单的案例。但是如果您开始在视图中看到复杂的逻辑,或者您发现自己重复某些模式,则可以将其重构为帮助程序(如果跨模型有用)或演示者类(对特定模型/视图有用)。通过这种方式,您的视图将更加清晰,您也可以更轻松地进行单独测试。