mi migración es
class AddUuidToUsers < ActiveRecord::Migration def change add_column :users, :uuid, :uuid, null: false, default: 'uuid_generate_v4()' add_index :users, :uuid end endEl esquema se cambia con:
t.uuid "uuid", default: "uuid_generate_v4()" Como puede ver, tenemos el null: false no se agrega, ¿no está seguro de por qué?
Pero cuando intento con un tipo de columna común, por ejemplo, una string , funciona bien.
¿Existe alguna limitación para el tipo de columna :uuid que no podemos usar null: false ?
Rails 4.2 ignora totalmente la opción null para columnas uuid con un valor predeterminado. Puede marcar un objeto de columna para su modelo:
> User.columns[2] # number of uuid column => #<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x007fe6fee53f20 ... @sql_type="uuid", @null=true, @default=nil, @default_function="uuid_generate_v4()">Pero las opciones de migración fueron las mismas que en su ejemplo:
add_column :users, :uuid, :uuid, null: false, default: 'uuid_generate_v4()' Rails 5.0 solucionó este error. El objeto de columna mantiene la opción null para la misma migración:
> 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> Y schema.rb también contiene null: false :
t.uuid "uuid", default: -> { "uuid_generate_v4()" }, null: false