生成一个以字符串字段为主键的模型

Jep*_*sen 6 model ruby-on-rails primary-key rails-activerecord

我想User在Ruby on Rails应用程序中创建一个模型.

我使用以下命令:

rails generate model User email:string name:string role:string
Run Code Online (Sandbox Code Playgroud)

可以email使用此命令定义主键吗?或者我必须修改使用此命令创建的数据库迁移文件?如何?

Sim*_*tti 8

不,你不能.默认情况下,主键是自动增量整数.

但是,您可以打开从命令生成的迁移,并更改它(在运行rake db:migrate命令之前).迁移可能会有一个create_table命令:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      # ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您阅读create_table文档,您会发现可以通过两个选项.具体来说,您需要设置:idfalse不生成id字段,并且您需要指定主键字段的名称.

    create_table :users, id: false, primary_key: :email do |t|
Run Code Online (Sandbox Code Playgroud)


Ric*_*eck 5

要添加@Simone Carletti回答,您可能需要使用execute设置primary key(如果它是模糊的).如果您正在修改现有的表格,尤其如此,您显然没有这样做:

class CreateUsers < ActiveRecord::Migration
   def change
      create_table :users, id: false do |t|
         t.string :email, null: false
         t.timestamps
      end
      execute "ALTER TABLE users ADD PRIMARY KEY (email);"
   end
end
Run Code Online (Sandbox Code Playgroud)

我们uuid在一些应用程序中使用了这些,这就是我们必须做的事情(primary_key: :uuid不起作用)......

在此输入图像描述