0

複雑な関連付けを持つ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 を介してこのルートに進むことにしました。これにより、アプリの移行ファイルをよりクリーンで整理することができたからです。

したがって、 a 自体が存在する可能性があり、多くを保持するDeveloperand も存在する可能性があるため、この関係を作成するためにandを追加しました。したがって、検索するか、関連するレコードを取得すると、アプリですべてが機能します。OrganizationDevelopershas_and_belongs_to_many :organizationshas_and_belongs_to_many :developersUser.find().account.developersUser.find().account.organizations


今、私は私が問題を抱えている部分に到達します. 私のRailsアプリ内には、というモデルがありAppます。はそれ自体でDeveloper多くを作成することも、その中に多くを作成して作成することもでき、その中に所属するすべての人がアクセスすることもできます。このような関係を実装する方法がわかりません。助言がありますか?AppsDeveloperOrganizationAppsOrganizationDevelopersOrganization


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
4

2 に答える 2

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

/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
于 2013-08-26T01:59:00.087 に答える
0

HABTM 関連付けが必要な場合。結合テーブルが必要です。Rails 4 では、以下を含む移行ファイルを追加できます。

create_join_table :developers, :organizations

次に、次を使用します。

Developer.find().organizations

また

Organization.find().developers

を使用する場合User.find().account。最初にアカウントのクラスを取得してから、developersまたはを使用することを決定する必要がありますorganizations

于 2013-08-26T01:57:57.373 に答える