介绍
我正在做一个系统,其中我有一个非常简单的布局,仅包含事务(带有基本 CRUD)。每笔交易都有日期、类型、借方金额(减)和贷方金额(加)。想想网上银行对账单,差不多就是这样。
我遇到的问题是让我的控制器保持瘦身并担心可能过度查询数据库。
一个简单的报告示例
- 所选期间的总借方,例如
SUM(debit) as total_debit
- 所选期间的总学分,例如
SUM(credit) as total_credit
总的总数,例如
total_credit - total_debit
报告必须允许动态日期范围,例如
where(date BETWEEN 'x' and 'y')
- 日期范围永远不会超过一年,一次最多只能说 1000 个事务/行
所以在我创建的控制器中:
def report
@d = Transaction.select("SUM(debit) as total_debit").where("date BETWEEN 'x' AND 'y'")
@c = Transaction.select("SUM(credit) as total_credit").where("date BETWEEN 'x' AND 'y'")
@t = @c.credit_total - @d.debit_total
end
附加问题信息
我的实际报告有接近 6 或 7 个数据库查询(例如,根据类型 == 1 或类型 == 2 等提取总贷方/借方)并且有更多计算,例如总计某些贷方/借方类型,然后添加和从其他总数中删除这些总数。
我正在尽最大努力坚持“瘦模型,胖控制器”,但我的控制器需要传递给视图的变量数量存在问题。在您创建要传递给视图的变量之前,Rails 似乎非常简单。除了将变量创建线放入控制器并通过将一些查询点点滴滴放入模型中使其“更瘦”之外,我看不出您还能如何做到这一点。
在模型中创建变量然后让控制器将这些变量传递给视图的地方我是否遗漏了什么?