Nota :Probabilmente vorrai dare un'occhiata a brcebn's rispondi se stai utilizzando una versione più recente di Rails.
Rails cercherà di interpretare questo:
t.string :uniqueid, default: md5(random()::text)
come codice Ruby e :default => md5(...)
non significa nulla in Ruby. Se lo citi, Rails penserà che sia una stringa e creerà il valore predefinito per uniqueid
la stringa 'md5(random()::text)'
e questo non aiuterà.
Se desideri utilizzare una chiamata di funzione in una colonna predefinita, puoi eseguire alter table
a mano:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Questo otterrà il valore predefinito che desideri nel database, ma potresti notare che non viene menzionato il nuovo valore predefinito nel tuo schema.rb
. Se desideri uno schema utilizzabile, dovrai invece utilizzare uno schema SQL inserendolo nel tuo application.rb
:
config.active_record.schema_format = :sql
Quindi elimina il tuo schema.rb
e usa structure.sql
invece. Nota che i dump dello schema SQL sono stati interrotti fino alla 3.2 e ci sono problemi di caricamento dello schema in varie versioni di Rails (ma puoi sempre psql < structure.sql
a modo tuo). Al rialzo, i dump dello schema SQL terranno traccia di cose fantasiose chiavi esterne reali, verificheranno vincoli, trigger, ...
A proposito, se vuoi davvero SHA, allora ti consigliamo di dare un'occhiata a digest
funzione da pgcrypto
.