2016-02-28 90 views
0

我希望能夠從控制器返回一些數據,以便我可以使用gon gem在JavaScript中創建圖形。在Rails控制器中加入表格

我有兩個型號:

account: id[PK, int], name[string], credit[boolean], active[boolean] 
balance: id[PK, int], account_id[FK, int], balance[decimal], date[date] 

class Account < ActiveRecord::Base 
    has_many :balances 
end 

class Balance < ActiveRecord::Base 
    belongs_to :account 
end 

對於一個給定的日期@latestDate,我希望能夠返回帳戶[名],帳戶[信貸]和平衡[平衡]。

目前,使用下面的代碼,我可以返回給定日期的balance對象,但我怎樣才能返回加入的account數據以及我還有帳戶[名稱]和帳戶[信用]。

代碼:

def statement 
    @dates = Balance.select("distinct(date)").order('date desc') 

    if (params[:date_id].blank?) 
     if (Balance.count > 0) 
     @latestDate = Balance.order('date desc').first.date 
     else 
     @latestDate = Date.current 
     end 
    else 
     @latestDate = params[:date_id] 
    end 

    @summaryBalances = Balance.joins(:account).order('accounts.credit').where('date = :abc', {abc: @latestDate}) 

    gon.assets = @summaryBalances 
    end 
+0

自從我使用ActiveRecord以來已經有一段時間了,但我相信[includes](http://apidock.com/rails/ActiveRecord/QueryMethods/includes)就是你想要的。與'join'類似,但它在進入數據庫時​​抓取額外的記錄。 –

+0

此外,我不確定'account'記錄是否與@ balanceBalances'中的'balances'一起存儲,或者您是否必須專門將它們存儲在另一個變量中。 –

+0

@RyanK如果我將我的代碼更改爲'gon.assets = Balance.includes(:account)',我仍然只返回餘額數據。我希望能夠在相同的對象中返回帳戶數據。 – Bhav

回答

0

要獲得帳戶對象,你應該得到通過模型的關係。

ex) 
@summaryBalances.each do |ba| 
    account = ba.account.name 
end 

如果您想避免N + 1問題,您應該使用預加載或包含來預存帳戶對象。

+0

這允許我循環訪問並獲取帳戶名稱,但是如何使用'@ summaryBalances'返回帳戶名稱? – Bhav

+0

你試過選擇嗎? http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-select –