2011-11-18 10 views
1

問題を簡略化するため、3つのモデルがあるとしましょう。 user,flightおよびplaneである。私は彼らが飛行した各飛行機を何回飛ばしたかをユーザーに伝えたい。Rails - 複数の関係Find

I私は考えることができる最も簡単な解決策はそうのような便をループしている...これを達成するためにどのようにように完全に立ち往生しています...

flown_planes = {} 

@user.flights.each do |f| 
    if flown_planes[f.plane.id] 
    flown_planes[f.plane.id] += 1 
    else 
    flown_planes[f.plane.id] = 1 
    end 
end 

は、私が何とか.find.countを使用することができますこれを達成するには?上記よりはるかにクリーンな方法があると確信しています。以下の関係をご覧ください。


フライト

class Flight < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :plane 
end 

飛行機

class Plane < ActiveRecord::Base 
    has_many :flights 
end 

ユーザー

class User < ActiveRecord::Base 
    has_many :flights 
end 

答えて

1

group_byを使用して、飛行機でユーザーのフライトをグループ化してください。あなたのためにそれを行う必要があります

@user.flights.group_by(&:plane_id) 

、...の繰り返しのため

// ...

@user.flights.group_by(&:plane_id).each do |plane_id, flights| 
    plane = Plane.find(plane_id) # gives you the plain object so you can fetch the plane name/identification,... whatever you need 
    flights.count # gives you count of flights in the plane 
    flights.each do |flight| 
      # do anything if you want with each of the flights the user had... 
    end 
end 
+0

[OK]をありがとう - しかし、私は彼らからループする必要があり、ループ内でI飛行機オブジェクトを持っている必要があり、ユーザーがその飛行機を何回飛行したかのカウント - どのようにすればいいですか? –

+0

投稿の更新を参照してください – davidb

+0

あなたは私のために今日答えている華麗な - 二番目の質問:) –