2012-09-18 124 views
1

我有兩個模型GroupPerson,我想要有多對多的關係,但我不清楚如何管理關係本身。我希望能夠分別創建組和人員 - 不一定通過嵌套模型 - 然後將人員從組視圖/模型本身鏈接到組。如何管理多對多關係

有沒有人有關於如何做的建議?

我想通過連接模型創建多對多關係,然後在Group模型中接受連接模型的嵌套屬性 - 所以我相信我將能夠通過Group視圖添加和刪除關係/模型。這種方法有意義嗎?

回答

1

我會創造一個PersonGroup模型,看起來像這樣:

class PersonGroup < ActiveRecord::Base 
    has_many :people 
    has_many :groups 
end 

,你可能也做rails generate migration create_person_group,並把這個在生成的遷移文件的up方法:

create_table :person_group do |t| 
    t.integer :person_id, :null => false 
    t.integer :group_id, :null => false 

    t.timestamps 
end 

add_index :person_group, [:person_id, :group_id], :unique => true 

然後在Person

class Person < ActiveRecord::Base 
    has_many :person_groups 
    has_many :groups, :through => :person_groups 
end 

而且在Group

class Group < ActiveRecord::Base 
    has_many :person_groups 
    has_many :people, :through => :person_groups 
end 
+0

很好的回答,除了加入模型的名稱。 rails默認使用按字母順序排列的模型名稱(即GroupPerson),或者使用描述關係的名稱(例如Membership,Grouping或其他詞或詞)。 –

+0

好點。我知道後者的慣例,但不是前者。我寧願建議一個更有意義的表名,但我想不出一個。也許OP,知道更多關於領域比我自己,將能夠。 –

0

創建一個junction table。連接表用於存儲多對多關係時。我不在ROR中開發,所以我不知道ActiveRecord的具體情況,但我相信這可以幫助您考慮問題。

group_id INTEGER, 
person_id INTEGER 
相關問題