2016-04-16 14 views
0

関連付けに問題があります。基本的に、ユーザーにはグループがあります(誰とも共有されません)。各グループには、クライアント、プロジェクト、およびタスクがあります。複数レベルのネストされた関連付けショートカット

class User < ActiveRecord::Base 
    has_many :groups 
    has_many :clients, through: :groups 
    has_many :projects, through :clients #(could be groups?) 
    has_many :task, through :groups 
end 

これはそれを行うための適切な方法である:

は、私のようなものを定義する必要がありますか?私はちょうど、各ユーザーから、すべてのタスク、グループ、およびクライアントをリストしたい。このようなモデルを「旅行」するのは大丈夫ですか? 私はいくつかのRoRのチュートリアルや書籍に従ってきましたが、すべてが少ないモデルを扱います。

basic rough model

答えて

1

あなたが望むようにあなたはを通じてをナビゲートすることができます。 のショートカットからネストしたhas_manyの関連付け(私が投稿したリンクの少し下を検索)をしたい場合、Hereが説明されています。

これが機能するためにあなたが(あなたがそれに近かった)次の操作を行う必要があり、この説明を与えられた:hereを見て(となり、これを設定するには

class User < ActiveRecord::Base 
    has_many :groups 
    has_many :clients, through: :groups 
    has_many :projects, through :groups 
    has_many :tasks, through :groups 
end 

class Group < ActiveRecord::Base 
    belongs_to :user 

    has_many :clients 
    has_many :projects, through :clients 
    has_many :tasks, through :clients 
end 

class Client < ActiveRecord::Base 
    belongs_to :group 

    has_many :projects 
    has_many :tasks, through :projects 
end 

class Project < ActiveRecord::Base 
    belongs_to :client 

    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :project 
end 

別の方法(そしておそらく短いが)以下のための両方の戦略)が文書化されている場合:

class User < ActiveRecord::Base 
    has_many :groups 
    has_many :clients, through: :groups 
    has_many :projects, through :clients 
    has_many :tasks, through :projects 
end 

class Group < ActiveRecord::Base 
    belongs_to :user 

    has_many :clients 
end 

class Client < ActiveRecord::Base 
    belongs_to :group 

    has_many :projects 
end 

class Project < ActiveRecord::Base 
    belongs_to :client 

    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :project 
end 

はそれが役に立てば幸い!

+0

ありがとう!、それは私が欲しかったものです。私はちょうどそれが正しい方法ではなかったことを恐れていた。私はあなたの答えに感謝します:D – Gaston

+0

@ガストン確かに、np!あなたが満足していて、それが正しい答えだと思うなら、それを正しい答えとしてマークしてください:) –

関連する問題