对Activerecord主键使用串行整数以外的其他类型

时间:2015-05-28 19:23:36

标签: ruby-on-rails primary-key rails-activerecord rails-migrations

我的数据模型通常要求它们的主键是另一种类型而不仅仅是一个vanilla自动递增整数。但是,Rails / AR并不完全清楚如何将其更改为默认值。

如何在Activerecord中使用除整数之外的其他类型作为主键?

1 个答案:

答案 0 :(得分:1)

警告:除了Rails Master(尚未发布 - PR#18228),schema.rb将不记得列类型,因此该功能暂时无法使用。解决了here

的变通方法

我今天正在查看文档,因为这是我长期以来一直在努力的事情,我遇到了t.primary_key

  

primary_key(name, type = :primary_key, options = {})

     

将主键定义附加到表定义。可以多次调用,但这可能不是一个好主意。

因此,您只需使用id: false指定迁移,并使用您选择的名称和类型指定主键:

class CreateTags < ActiveRecord::Migration
  def change
    create_table :tags, id: false do |t|
      t.primary_key :name, :string

      t.timestamps null: false
    end

    # Alternative awkward-er syntax
    # create_table "tags", primary_key: "name", id: "string" do
  end
end

您的模型甚至会自动推断架构中的主键列名称。耶!