0

所以我正在开发一个 Rails 4 应用程序,我有两个模型,一个开发人员和一个应用程序。

基本上我希望开发人员充当创始人并拥有多个应用程序,这些应用程序属于开发人员(创始人)。然后我希望应用程序拥有许多协作者,并且协作者属于许多应用程序。这是我的代码,对吗?我怎么会说将协作者添加到应用程序?

应用程序

has_and_belongs_to_many :collaborators, class_name: 'Developer', foreign_key: :collaborator_id
has_and_belongs_to_many :founders, class_name: 'Developer', foreign_key: :founder_id

开发商

has_and_belongs_to_many :apps, foreign_key: :collaborator_id
has_and_belongs_to_many :apps, foreign_key: :founder_id

关系表

def change
create_table :apps_developers, id: false do |t|
  t.references :founder, references: 'Developer'
  t.references :collaborator, references: 'Developer'

  t.references :app
  t.boolean :collaborator_pending, default: :true
end

add_index :apps_developers, [:founder_id, :app_id], unique: true
add_index :apps_developers, [:collaborator_id, :app_id, :collaborator_pending], unique: true, name: 'index_apps_collaborators'
  end
4

1 回答 1

1

你应该为合作者和has_many创始人使用HABTM,而不是相反。

原因是合作者和应用之间的关系是多对多的,而创始人和应用之间的关系是一对多的。

/app/models/app.rb

Class App < ActiveRecord::Base
  belongs_to :founder, :class_name => 'Developer'
  has_and_belongs_to_many :collaborators, :class_name => 'Developer'
end

/app/models/developer.rb

Class Developer < ActiveRecord::Base
  has_many :apps, :foreign_key => :founder_id
  has_and_belongs_to_many :apps, :foreign_key => :collaborator_id
end

至于您的第二个问题,您可以通过以下方式将协作者添加到应用程序中:

app.collaborators << developer

whereapp是类的对象,是Appdeveloper的对象Developer

于 2013-08-24T21:56:09.370 回答