如何在Rails 3.2中創建以下模型?項目可以有1個以上的所有者和1個以上的用戶。他們都是Person類的實例。我想過has_and_belongs_to_many
,但我不知道如何爲每個項目處理兩個單獨的人員集合。在Rails中命名多對多關係
0
A
回答
0
你需要一個連接模型來表示每個has-and-belongs-to-many
關係,你所描述的here訪問使用has-many-through
:
class ProjectOwnerLink < ActiveRecord::Base
belongs_to :project
belongs_to :owner, class_name: 'Person'
end
class ProjectUserLink < ActiveRecord::Base
belongs_to :project
belongs_to :user, class_name: 'Person'
end
class Project < ActiveRecord::Base
has_many :project_owner_links
has_many :owners, :through => :project_owner_links
has_many :project_user_links
has_many :users, :through => :project_user_links
end
class Person < ActiveRecord::Base
has_many :project_owner_links
has_many :owned_projects, :through => :project_owner_links, :source => :project
has_many :project_user_links
has_many :used_projects, :through => :project_user_links, :source => :project
end
0
您可以定義的關係成立的種類另一種模型Participation
,即用戶的角色。 (未測試的)代碼:
class Project < ActiveRecord::Base
has_many :participations
has_many :users, :through => :participations
def with_role(role)
includes(:participations).where('participation.role = ?', role)
end
def owners
users.with_role('owner')
end
def participants
users.with_role('participant')
end
end
class User < ActiveRecord::Base
has_many :participations
has_many :projects, :through => :participations
def with_role(role)
includes(:participations).where('participation.role = ?', role)
end
def projects_owned
projects.with_role('owner')
end
def projects_participating_in
projects.with_role('participant')
end
end
class Participation < ActiveRecord::Base
# has an attribute 'role'
belongs_to :project
belongs_to :user
end
0
相關問題
- 1. 在Rails中創建多對多關係
- 2. Rails 4多對多關係
- 3. Rails多對多關係
- 4. Rails中的多態多對多關係
- 5. 在多對多關係中命名錶laravel
- 6. Rails中的多對多關係
- 7. Rails:多對多多態關係
- 8. Rails兩對多關係
- 9. 在Rails中保存相關的多對多關係
- 10. Rails:如何排序多對多關係
- 11. Rails 3:限制多對多關係
- 12. Rails - 多對多關係 - 數據問題?
- 13. Rails - 建立多對多關係
- 14. 多對多關係ruby on rails 3
- 15. Rails:與自我的多對多關係
- 16. 更新與Rails的多對多關係
- 17. Rails 4與多對多關係的searchkick
- 18. rails獨特的多對多關係
- 19. Ruby on Rails - n:m多對多關係
- 20. Rails多對多的關係驗證
- 21. 在Rails中建模多個多對多關係
- 22. 如何關聯我的對象,以便在Rails中可以將多對多關係用作一對多關係?
- 23. 與Rails 3.2上的自定義表名的多對多關係
- 24. RAILS ActiveRecord ::關係如何獲得多對多,但:表名
- 25. Rails中的一對多關係
- 26. Rails中的多對一雙向關係
- 27. 替代多對多關係的代碼優先命名約定
- 28. 如何更改多對多表關係的命名約定?
- 29. Rails多對多的關係和遠程關係
- 30. 如何命名多對多關聯? [ActiveRecord]