【发布时间】:2017-01-06 08:05:12
【问题描述】:
在完成了多个教程之后,我目前正在开发我的第一个 Rails 项目。
我正在尝试建立一个网页来跟踪我未来 6 个月的储蓄目标。
基本上该网站由一个表单输入组成,我在其中输入我将钱存入储蓄的日期和金额。然后,此网站会更新折线图以显示当前节省与目标线的关系。
到目前为止,我已经成功构建了表单和数据库(使用 postgresql)并创建了显示目标并接受来自表单的输入的图表。
我遇到的问题是输入值显示为离散数字,而不是当月的累积总和(即第 4 周应该是第 1 周到第 4 周节省的总和)。
我最初考虑在数据库中有一个名为 amount_cum 的第三列,并在控制器的页面加载方法中添加了一些行,这意味着数据库将在每个页面加载时重新计算,这可能会很慢......
任何建议都将不胜感激,我应该修改模型还是控制器?
讲道理
class PagesController < ApplicationController
def home
@pages = Pages.new
@progress = Pages.order(:week)
@goal = Goals.all
end
def create
@pages = Pages.new(pages_params)
weeks_year=Date.parse(params[:pages][:week]).strftime("%U")
@pages = Pages.new(pages_params.merge(:week => weeks_year))
if @pages.save
flash[:success]="Savings Uploaded Successfully"
redirect_to root_path
else
flash[:danger]=@pages.errors.full_messages.join(", ")
redirect_to root_path
end
end
private
def pages_params
params.require(:pages).permit(:week, :amount)
end
end
和模型文件:
class Pages < ActiveRecord::Base
validates :week, presence: true
validates :amount, presence: true
end
我的视图文件 - 我使用 chartkick gem 生成图表:
<%= line_chart [
{name: "Amount Saved", data: @progress.group(:week).sum(:amount)},
{name: "Goal Savings", data: @goal.group(:week).sum(:amount) }] %>
应用程序的屏幕截图,以便您查看图表是如何针对目标显示的。 link
【问题讨论】:
-
如果您可以发布一些代码 sn-ps 可能会更容易提供帮助
-
已添加 - 对我轻松一点:P
-
所以你需要按月累积总和?
-
在这个阶段,我使用周作为我的 x 轴,所以我将日期转换为一年中的一周。在我的脑海中,我要么希望控制器执行数据库中所有条目的总和,其周值小于当前对象,然后将该数字保存到数据库中,要么有一个第三列是运行总计。哪个更容易实现
标签: ruby-on-rails database postgresql cloud9-ide