0

我有以下哪些型號是成立了一個項目:Rails的活動記錄協會發行

class User < ActiveRecord::Base
has_and_belongs_to_many :projects
has_and_belongs_to_many :user_roles

class Project < ActiveRecord::Base
has_and_belongs_to_many :users
has_many :user_roles

class UserRole< ActiveRecord::Base
has_and_belongs_to_many :users
belongs_to :project

我的問題出現時,我想返回每個項目用戶參與了他們在項目上的用戶角色(包括他們已經完成的任何項目並且沒有分配用戶角色)

我有一種感覺has_many :through可能的工作,但我不知道它會究竟是如何工作的。任何想法將不勝感激!

+0

第三類是UserRole也許? –

+0

一個'Project'有很多'User'通過'UserProfile' –

回答

1
class User < ActiveRecord::Base 
    has_many :user_roles 
    has_many :projects, :through => :user_roles 


class Project < ActiveRecord::Base 
    has_many :user_roles 
    has_many :users, :through => :user_roles 


class UserRole< ActiveRecord::Base 
    belongs_to :user 
    belongs_to :project 
+1

這麼快就回答! ;)按照慣例,has_many:through模型關聯可以更好地工作,因爲您有一箇中間模型(直通關聯),可以爲多態關聯提供更多的靈活性。這方面的一個很好看的是[喬什Susser的博客(http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off) –

+0

感謝您的答覆!如果用戶已經參與了項目,但沒有被分配給一個用戶角色會這仍然工作? – Gabe

+0

@加貝當然!你很可能會在你的連接表'user_roles'有'role'欄,你可以選擇在該列接受'null'值(或與一些'默認value'指定未分配的角色) –