2012-04-30 8 views
1

私のレールアプリケーションでは、スコープに渡されたパラメータに基づいてすべてのジョブを表示するフィルタがありますが、これはすべて正常に機能しますが、その拡張として、フィルタで選択したプロジェクトとクライアントに基づいて選択できるジョブ。ここに私の関係です:Rubyでの結合に問題があります

クライアントは、多くのプロジェクト
プロジェクトを持っているクライアントに属し、多くの仕事
仕事をプロジェクトに属し

を持っている私は、クライアントに基づいてすべてのプロジェクトをリストアップし、すべてのことができますプロジェクトに基づいたジョブですが、私が問題を抱えているのは、クライアントが指定されたときにすべてのジョブをリストすることです。そのため、そのクライアントのすべてのプロジェクトを取得し、それらのプロジェクトのすべてのジョブを取得します。

私はこの作業を取得するために結合を使用する必要が推測しているが、誰もが良いリソースIの方向に私を指すことができれば運:(

で数日間試してみましたこの機能は、モデルの仕事をする前に、それは非常に

+3

うまくいけば便利です:http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association – sarnold

+0

パーフェクト、まさに私です必要とされ、今作業しています。ありがとうヒープsarnold :) – Cristian

+0

優秀;あなたが他の人のための答えで前と後を素早くスケッチすることを気にしないならば。 (私は_good_答えを書くのに十分よく機能を思い出さないが、私は便利なリンクを持っていた) – sarnold

答えて

1

をいただければ幸いです。この問題を解決しようとするために、次のように見えた目を通すことができます -

class Client < ActiveRecord::Base 
     has_many :projects 

    end 

    class Project < ActiveRecord::Base 
     belongs_to :client 
     has_many :jobs 

    end 

    class Job < ActiveRecord::Base 
     belongs_to :project 

    end 

仕事を得るためには、クライアントのみに基づいて、関係を通じてhas_manyのをしなければなりませんでしたクライアントモデルで設定してください。

class Client < ActiveRecord::Base 
     has_many :projects 
     has-many :jobs, :through => :projects 

    end 
は、その後、あなたのコントローラでは、この新たな関係を使用してクライアントIDを介してすべてのジョブを取得することができます - それは見つかったクライアントのすべてのジョブを返します

@jobs = Client.find(params[:id]).jobs 

を。もう一度sarnoldのおかげでこのソリューションにつながったガイドへのリンクがあります

+0

良い答え!謝辞をありがとう! – sarnold

関連する問題