Nota :Probablemente quieras ver brcebn's responda si está usando una versión más reciente de Rails.
Rails intentará interpretar esto:
t.string :uniqueid, default: md5(random()::text)
como código Ruby y :default => md5(...)
no significa nada en Ruby. Si lo cita, Rails pensará que es una cadena y establecerá el valor predeterminado para uniqueid
la cadena 'md5(random()::text)'
y eso no va a ayudar.
Si desea usar una llamada de función en una columna predeterminada, puede hacer alter table
a mano:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Eso le dará el valor predeterminado que desea en la base de datos, pero es posible que note que no se menciona el nuevo valor predeterminado en su schema.rb
. Si desea un esquema utilizable, tendrá que usar un esquema SQL colocando esto en su application.rb
:
config.active_record.schema_format = :sql
Luego elimine su schema.rb
y usa structure.sql
en cambio. Tenga en cuenta que los volcados de esquema SQL se rompieron hasta 3.2 y hay problemas de carga de esquema en varias versiones de Rails (pero siempre puede psql < structure.sql
su camino alrededor de eso). Por el lado positivo, los volcados de esquemas SQL realizarán un seguimiento de las claves foráneas reales de las cosas sofisticadas, comprobarán las restricciones, los activadores, ...
Por cierto, si realmente quieres SHA, querrás ver el digest
función de pgcrypto
.