2011-06-17 11 views
0

私は2つの主要なモデルを持っているのRails 2.3.11のアプリがあります。Railsの団体

  • 活動
    • トランザクション

ライブサイト:http://iatidata.heroku.com
のGithub:https://github.com/markbrough/IATI-Data

すべてのトランザクションはアクティビティの下にネストされます。各アクティビティには複数のトランザクションがあります。

Railsでの関連付けの仕組みについて混乱していると思いますが、おそらく私がしようとしていることは不可能です。

本質的には、各国に属するすべての活動のトランザクションの総額を取得したいと考えています。それは、このエラーを与える

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

:だから、どのくらいのお金をインドに行って、どのくらいのアフガニスタンなど

これは動作します:

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

しかし、これは動作しません

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 

これはおそらくかなり単純な問題だと思いますが、何が起こっているのか分かりません。 2つのモデルは、id(アクティビティ)とactivity_id(トランザクション)を介して接続されています。

ありがとうございました!

答えて

0

何が破壊されていない、Rails2でfind方法は、配列を返す - 及びは、Arrayクラスにはtransactions方法は存在しません。 eachイテレータを使用して、動作している最初のものを使用するか、反対側の作業 - Transactionから作業をグループ化します。私はRails2コードを書いたので、それはしばらくしているが、それはこのようなものになるでしょう:

-される「上がらないあなたのアプリに関するいくつかのものがあるので、あなたのアプリケーションにコピー&ペーストする準備ができていないのです
Transaction.all(:select => "activity_id, SUM(value) AS total", :group => 'activity_id') 

私には明快ですが、うまくいけば、あなたを正しい方向に向けることができます。

+0

ありがとうございました!それがうまくいくと思います。私はそれを試してみる。ありがとう。 – Mark