簡體   English   中英

兩個belongs_to關聯遷移的模型相同

[英]Same Model for Two belongs_to Associations migration

如何為具有對同一模型的兩個引用的模型創建遷移。

我有一個具有兩個角色(買方和賣方)的用戶模型,也有一個銷售模型,因此每筆銷售都應有一個買方和一個賣方。

我已經看到了這個答案 ,暗示我的銷售模式應該像

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 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

希望這可以幫助!

這稱為自我連接 ,可以如下創建:

#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

暫無
暫無

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

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