我有兩個模型Group
和Person
,我想要有多對多的關係,但我不清楚如何管理關係本身。我希望能夠分別創建組和人員 - 不一定通過嵌套模型 - 然後將人員從組視圖/模型本身鏈接到組。如何管理多對多關係
有沒有人有關於如何做的建議?
我想通過連接模型創建多對多關係,然後在Group
模型中接受連接模型的嵌套屬性 - 所以我相信我將能夠通過Group
視圖添加和刪除關係/模型。這種方法有意義嗎?
我有兩個模型Group
和Person
,我想要有多對多的關係,但我不清楚如何管理關係本身。我希望能夠分別創建組和人員 - 不一定通過嵌套模型 - 然後將人員從組視圖/模型本身鏈接到組。如何管理多對多關係
有沒有人有關於如何做的建議?
我想通過連接模型創建多對多關係,然後在Group
模型中接受連接模型的嵌套屬性 - 所以我相信我將能夠通過Group
視圖添加和刪除關係/模型。這種方法有意義嗎?
我會創造一個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
創建一個junction table。連接表用於存儲多對多關係時。我不在ROR中開發,所以我不知道ActiveRecord的具體情況,但我相信這可以幫助您考慮問題。
group_id INTEGER,
person_id INTEGER
很好的回答,除了加入模型的名稱。 rails默認使用按字母順序排列的模型名稱(即GroupPerson),或者使用描述關係的名稱(例如Membership,Grouping或其他詞或詞)。 –
好點。我知道後者的慣例,但不是前者。我寧願建議一個更有意義的表名,但我想不出一個。也許OP,知道更多關於領域比我自己,將能夠。 –