2011-06-17 184 views
0

我有一個Rails應用程序2.3.11其中有兩個關鍵模型:的Rails協會

  • 活動
    • 交易

直播現場:http://iatidata.heroku.com
Github上:https://github.com/markbrough/IATI-Data

每筆交易都嵌套在一項活動中。每項活動都有多個交易。

我想我已經對關聯如何在Rails中工作感到困惑,但也許我試圖做的事情是不可能的。

本質上,我想獲得屬於每個國家的所有活動的交易總價值。那麼多少錢去印度,有多少阿富汗等

這工作:

@thiscountry_activities.each do |a| 
    @thiscountry_value = @thiscountry_value + a.transactions.sum(:value) 
end 

但是,這並不工作:

@thiscountry_value = @thiscountry_activities.transactions.sum(:value) 

它給這個錯誤:

undefined method `transactions' for #<Array:0xb5670038> 

@thiscountry_activities定義如下:

@activities = Activity.find(:all, :conditions=> @conditions) 

這是放置在一個循環獲取每個接收國家代碼。 @條件是:

@conditions[:recipient_country_code]=*each recipient country code, e.g. AF* 

看起來像我有某種關聯問題。這是如何設置模型:

class Transaction < ActiveRecord::Base 
    belongs_to :activity 
end 

class Activity < ActiveRecord::Base 
    has_and_belongs_to_many :policy_markers 
    has_and_belongs_to_many :sectors 
    has_many :transactions 
end 

我認爲這可能是一個相當簡單的問題,但我無法弄清楚發生了什麼事情。這兩個模型通過id(在Activity中)和activity_id(在Transactions中)連接在一起。

謝謝!

回答

0

什麼都不壞,Rails2中的find方法返回一個Array - 並且不是transactions 0123方法在Array類上。使用迭代器中的第一件事,使用迭代器each,或者從另一側開始工作 - 從Transaction開始並按活動分組。它已經有一段時間,因爲我寫Rails2代碼,但它會是這樣的:

Transaction.all(:select => "activity_id, SUM(value) AS total", :group => 'activity_id') 

如,是因爲有你的應用中的一些事情AREN」這不是準備複製粘貼到您的應用程序對我清楚,但希望它能讓你走向正確的方向。

+0

謝謝!很高興知道它應該如何工作。我會試試看。謝謝。 – Mark