两个belongs_to关联迁移的相同模型

时间:2016-01-09 18:59:57

标签: ruby-on-rails database ruby-on-rails-4 associations

如何为具有两个对同一模型的引用的模型创建迁移。

我有一个用户模型,有两个角色,买家和卖家,我也有销售模式,所以每个销售应该有一个买家和一个卖家。

我看过this answer表明我的销售模式应该是

class Sale < ActiveRecord::Base
  belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer_id'
  belongs_to :seller, :class_name => 'User', :foreign_key => 'seller_id'
end

但我不知道如何创建迁移并让它工作......!

2 个答案:

答案 0 :(得分:6)

您必须创建以下迁移:

rails g migration AddBuyerAndSellerToSales buyer:references seller:references

这应创建以下迁移文件:

class AddBuyerAndSellerToSales < ActiveRecord::Migration
  def change
    add_reference :sales, :buyer, index: true, foreign_key: true
    add_reference :sales, :seller, index: true, foreign_key: true
  end
end

如果您使用像PostgreSQL这样的数据库引擎,则必须告诉引擎外键将指向哪个表。

class AddBuyerAndSellerToSales < ActiveRecord::Migration
  def change
    add_reference :sales, :buyer, index: true   # foreign_key: true <= remove this!
    add_reference :sales, :seller, index: true  # foreign_key: true <= remove this!

    add_foreign_key :sales, :users, column: :buyer_id
    add_foreign_key :sales, :users, column: :seller_id
  end
end

希望这有帮助!

答案 1 :(得分:0)

这称为self join,可以按如下方式创建:

#app/models/sale.rb
class Sale < ActiveRecord::Base
  belongs_to :buyer, class_name: 'User', foreign_key: :buyer_id
  belongs_to :seller, class_name: 'User', foreign_key: :seller_id
end

-

$ rails g migration CreateSales

#db/migrate/create_sales______________.rb
class CreateSales < ActiveRecord::Migrate
    def change
        change_table :sales do |t|
           t.references :seller
           t.references :buyer
        end
    end
end

$ rake db:migrate