2013-08-26 47 views
0

我正在研究与复杂关联的Rails 4应用程序,我无法弄清楚如何将一个模型连接到父项。Rails has_and_belongs_to_many与许多

基本上我的应用程序逻辑如下

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的模型。 A Developer可以创建许多Apps本身或Developer可以创建和Organization并在该Organization内创建许多Organization属于该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 
+0

开发人员可以属于很多组织吗? – Bigxiang

+0

@Bigxiang是的,他们可以 – ny95

回答

2

/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 

/应用/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 
+0

谢谢,我的用户模型与账户一起工作吗? – ny95

+0

应该的,是的。如果您发现任何错误,请告诉我。 – depa

+0

我在想,为了让它更干净我可以让一个组织拥有许多创始人和许多合作者,这种设置有可能吗? – ny95

0

如果你想有一个HABTM关联。你需要一个连接表。在Rails 4,你可以添加含有这种迁移文件:

create_join_table :developers, :organizations 

然后只需使用:

Developer.find().organizations 

Organization.find().developers 

如果使用User.find().account。你首先必须获得帐户的类,然后决定使用developersorganizations

+0

感谢这使得它更清楚,但只要向应用程序添加到帐户或组织将这项工作? – ny95

+0

我认为它应该可以在任何地方添加应用程序。您最好将应用程序添加到用户模型,将其与开发人员或组织分离。 – Bigxiang

相关问题