两个 belongs_to 关联迁移的同一模型
Same Model for Two belongs_to Associations migration
如何为具有对同一模型的两个引用的模型创建迁移。
我有一个有两个角色的用户模型,买家和卖家,我还有一个销售模型,所以每次销售都应该有一个买家和一个卖家。
我看到 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
但我不知道如何创建迁移并使其正常工作...!
您必须创建以下迁移:
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 这样的数据库引擎,您必须告诉引擎 table 外键将指向哪个引擎。
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
希望对您有所帮助!
这称为 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
如何为具有对同一模型的两个引用的模型创建迁移。
我有一个有两个角色的用户模型,买家和卖家,我还有一个销售模型,所以每次销售都应该有一个买家和一个卖家。
我看到 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
但我不知道如何创建迁移并使其正常工作...!
您必须创建以下迁移:
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 这样的数据库引擎,您必须告诉引擎 table 外键将指向哪个引擎。
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
希望对您有所帮助!
这称为 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