首页 > 解决方案 > Rails 6迁移到对不同于rails标准的列的引用

问题描述

我有两个模型WalletFakeWalletWallet应该有一个,并且FakeWallet应该通过wallet_type和来识别external_id。这意味着我需要根据钱包external_id字段添加引用。

标准迁移将是:

# rails g migration addReferencesToFakeWallets wallet:references

class AddReferencesToFakeWallets < ActiveRecord::Migration[6.1]
  def change
    add_reference :fake_wallets, :wallet, null: false, foreign_key: true
  end
end

rails db:migrate产生我之后:

t.bigint "wallet_id", null: false
t.index ["wallet_id"], name: "index_fake_wallets_on_wallet_id"

如何通过external_id而不是绑定这两个模型wallet_id

[编辑]

# schema.rb after suggestion from comments

  create_table "fake_wallets", force: :cascade do |t|
    t.decimal "balance", default: "0.0"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.bigint "external_id"
    t.index ["external_id"], name: "index_fake_wallets_on_external_id"
  end

  create_table "wallets", force: :cascade do |t|
    t.integer "wallet_type"
    t.string "external_id"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

标签: ruby-on-railsrails-activerecord

解决方案


推荐阅读