2017-04-18 92 views
1

我的迁移是Postgres的迁移与缺省值UUID列类型不起作用

class AddUuidToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :uuid, :uuid, null: false, default: 'uuid_generate_v4()' 
    add_index :users, :uuid 
    end 
end 

架构与改变:

t.uuid  "uuid",        default: "uuid_generate_v4()" 

正如你看到的,我们的null: false不添加,不肯定为什么?

但是,当我尝试与一个共同的列类型例如string它运作良好。

是否有我们不能用null: false:uuid列类型有何限制?

+1

没有针对此类型在PostgreSQL上侧没有限制。我只是设置了'NOT NULL'而没有问题。你可以通过尝试使用'change_column_null'来解决这个问题,我想这不会回答你的问题。 –

回答

1

的Rails 4.2完全忽略了默认值UUID列null选项。您可以检查一列对象模型:

> User.columns[2] # number of uuid column 
=> #<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x007fe6fee53f20 ... 
@sql_type="uuid", @null=true, @default=nil, @default_function="uuid_generate_v4()"> 

但迁移选项是相同的例子:

add_column :users, :uuid, :uuid, null: false, default: 'uuid_generate_v4()' 

的Rails 5.0已经修正了这个错误。 Column对象持续了同一移植null选项:

> User.columns[2] 
=> #<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x007fa6c3722650 ... 
@sql_type="uuid", @type=:uuid, @null=false, @default=nil, @default_function="uuid_generate_v4()", @collation=nil, @comment=nil> 

而且schema.rb还包含null: false

t.uuid "uuid", default: -> { "uuid_generate_v4()" }, null: false