[英]Rails has_and_belongs_to_many with Many
我正在研究具有復雜關聯的Rails 4應用程序,我無法弄清楚如何將一個模型加入父模型。
基本上我的應用程序邏輯如下
User
- belongs_to :account, polymorphic: true
Developer
- has_one :user, as: :account
- has_and_belongs_to_many :organizations
Organization
- has_one :user, as: :account
- has_and_belongs_to_many :developers
所以不可能有一個Developer
本身並沒有,也可以和Organization
,其擁有許多Developers
,所以我說has_and_belongs_to_many :organizations
和has_and_belongs_to_many :developers
創建這種關系。 所以一切都在我的應用程序中工作,如果我查找User.find().account.developers
或User.find().account.organizations
我得到相關的記錄。
現在我們到了遇到麻煩的地方。 在我的Rails應用程序中,我有一個名為App
的模型。 Developer
可以自己創建許多Apps
,或者Developer
可以在該Organization
內創建和Organization
並創建許多Apps
,以便屬於該Organization
所有Developers
也可以訪問。 我不知道如何實現這樣的關系。 有什么建議么?
Developer
has_one :user, as: :account
has_many :apps, as: :appable
has_and_belongs_to_many :founding_organizations, class_name: 'Organization', foreign_key: :founder_id
has_and_belongs_to_many :collaborating_organizations, class_name: 'Organization', foreign_key: :collaborator_id
has_and_belongs_to_many :organizations (Should this stay?)
Organization
has_one :user, as: :account
has_many :apps, as: :appable
has_and_belongs_to_many :founders, class_name: 'Developer', association_foreign_key: :founder_id
has_and_belongs_to_many :collaborators, class_name: 'Developer', association_foreign_key: :collaborator_id
has_and_belongs_to_many :developers (Should this stay?)
App
belongs_to :appable, polymorphic: true
/app/models/app.rb
App < ActiveRecord::Base
belongs_to :appable, :polymorphic => true
end
/app/models/organization.rb
Organization < ActiveRecord::Base
has_and_belongs_to_many :founders, :class_name => 'Developer', :association_foreign_key => :founder_id, :join_table => 'founders_organizations'
has_and_belongs_to_many :collaborators, :class_name => 'Developer', :association_foreign_key => :collaborator_id, :join_table => 'collaborators_organizations'
has_many :apps, :as => :appable
# Other relationships
end
/app/models/developer.rb
Developer < ActiveRecord::Base
has_and_belongs_to_many :founded_organizations, :class_name => 'Organization', :foreign_key => :founder_id, :join_table => 'founders_organizations'
has_and_belongs_to_many :collaborated_organizations, :class_name => 'Organization', :foreign_key => :collaborator_id, :join_table => 'collaborators_organizations'
has_many :apps, :as => :appable
# Other relationships
end
如果你想要一個HABTM協會。 你需要一個聯接表。 在Rails 4中,您可以添加包含以下內容的遷移文件:
create_join_table :developers, :organizations
然后使用:
Developer.find().organizations
要么
Organization.find().developers
如果您使用User.find().account
。 你必須先獲得帳戶的課程,然后決定使用developers
或organizations
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.