1

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

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

クライアントに基づくすべてのプロジェクトとプロジェクトに基づくすべてのジョブを一覧表示できますが、クライアントのみを指定した場合にすべてのジョブを一覧表示するのに問題があるため、そのクライアントのすべてのプロジェクトを取得してから取得しますそれらすべてのプロジェクトのすべての仕事。

これを機能させるには結合を使用する必要があると思いますが、数日間試してみましたが、運がありません:(

誰かが私を良いリソースの方向に向けることができれば、私はこの問題を解決しようとすることができます.

4

1 に答える 1

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_manythroughリレーションシップをクライアントモデルで設定する必要がありました。

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

    end

次に、コントローラーで、この新しい関係を使用して、クライアントIDを介してすべてのジョブを取得できます-

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

これにより、見つかったクライアントのすべてのジョブが返されます。この解決策に私を導いたガイドへのリンクを提供してくれたsarnoldにもう一度感謝します

于 2012-04-30T08:01:36.333 に答える