簡體   English   中英

Rails has_and_belongs_to_many with Many

[英]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
  • 我決定通過STI走這條路,因為這使我的應用程序遷移文件更清晰,更有條理

所以不可能有一個Developer本身並沒有,也可以和Organization ,其擁有許多Developers ,所以我說has_and_belongs_to_many :organizationshas_and_belongs_to_many :developers創建這種關系。 所以一切都在我的應用程序中工作,如果我查找User.find().account.developersUser.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 你必須先獲得帳戶的課程,然后決定使用developersorganizations

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM