Activerecord迁移,使t.references正确指向自定义ID类型,字符串不是整数?

Jas*_*lis 4 ruby migration activerecord ruby-on-rails

下面我有一个"test"模型的迁移,它使用它自己的主键,一个String而不是一个Integer.

    class CreateTest < ActiveRecord::Migration[5.1]
      def change
        create_table :test, id: false do |t|

          t.string  :id,          primary_key: true

          t.timestamps
        end        
      end
    end
Run Code Online (Sandbox Code Playgroud)

现在我们有了t.references测试的"客户端"模型.

    class CreateClients < ActiveRecord::Migration[5.1]
      def change
        create_table :clients do |t|

          t.references :test,   null: false

          t.timestamps
        end
      end
    end
Run Code Online (Sandbox Code Playgroud)

问题是t.references假设它是一个整数id.

    # == Schema Information
    #
    # Table name: clients
    #
    #  id         :integer          not null, primary key
    #  test_id    :integer          not null
    #  created_at :datetime         not null
    #  updated_at :datetime         not null
Run Code Online (Sandbox Code Playgroud)

这显然是错误的,因为它Test.id是一个字符串.

我是否需要做一些魔术来t.references"知道"它是基于模型的字符串还是什么?

谢谢.

小智 5

使用以下命令将其添加到迁移中references:

type: :string
Run Code Online (Sandbox Code Playgroud)

参考列类型.默认为:整数.

你可以在这里阅读更多.