【发布时间】:2016-03-30 06:41:17
【问题描述】:
在我的 Rails 应用程序中,我尝试使用 Chart.js 根据从控制器传递的数据(在 gon gem 的帮助下)创建包含数据集的折线图。具体来说,我希望每个数据集都基于一个 account_id。
目前,控制器包含此代码,其中 gon.balances 是一个对象数组,包含以下字段 - account_id, balance, date...:
balances_controller.rb:
....
def index
@balances = Balance.all.order(date: :desc)
gon.balances = @balances
end
....
我想知道是否可以像下面的伪代码那样在控制器中动态创建变量,如果可以,如何?
- 读取所有唯一的 Balance.account_id
- 对于每个 Balance.account_id
- 返回账户名(Account.name)
- 与该 Balance.account_id 对应的所有 Balance.date 和 Balance.balance
所以实际上,我希望能够像这样返回一个对象数组:
{:balance1.account.name => [[balance1.date, balance1.balance],
[balance2.date, balance2.balance]],
:balance3.account.name => [[balance3.date, balance3.balance]] }
更新:
在下面 Dileep Nandanam 的帮助下,我设法返回了按 account_id 排序的所有余额。
balances_controller.rb:
def index
@balances = Balance.all.order(date: :desc)
@balancesSortedByAccountId = Hash[
Balance.all.order(date: :desc).group_by(&:account_id).map{|acc_id, acc_details|
["acc_#{acc_id}".to_sym, acc_details.map(&:balance)]
}
]
gon.balances = @balances
gon.balancesSortByAccId = @balancesSortedByAccountId
end
提供这样的哈希:
{:acc_id1 => [balance1, balance2], :acc_id2 => [balance_3] }
如何修改它以提供如下所示的哈希:
{:balance1.account.name => [[balance1.date, balance1.balance],
[balance2.date, balance2.balance]],
:balance3.account.name => [[balance3.date, balance3.balance]] }
我不确定如何返回名称,我尝试了以下方法来尝试为日期和余额创建数组,但这会导致两个单独的数组:
@balancesSortedByAccountId = Hash[
Balance.all.order(date: :desc).group_by(&:account_id).map{|acc_id, acc_details|
["acc_#{acc_id}".to_sym, [acc_details.map(&:date), acc_details.map(&:balance)]]
}
]
【问题讨论】:
标签: javascript ruby-on-rails arrays ruby hash