Bemærk :Du vil sikkert se på brcebn's svar, hvis du bruger en nyere version af Rails.
Rails vil forsøge at fortolke dette:
t.string :uniqueid, default: md5(random()::text)
som Ruby-kode og :default => md5(...)
betyder ikke noget i Ruby. Hvis du citerer det, vil Rails tro, at det er en streng og lave standardværdien for uniqueid
strengen 'md5(random()::text)'
og det vil ikke hjælpe.
Hvis du vil bruge et funktionskald i en kolonnestandard, kan du gøre ændre tabel
i hånden:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Det vil give dig den standard, du ønsker i databasen, men du vil måske bemærke, at der ikke er nogen omtale af den nye standard i dit schema.rb
. Hvis du vil have et brugbart skema, skal du bruge et SQL-skema i stedet ved at indsætte dette i dit applikation.rb
:
config.active_record.schema_format = :sql
Slet derefter dit schema.rb
og brug structure.sql
i stedet. Bemærk, at SQL-skemadumps var brudt indtil 3.2, og der er problemer med skemaindlæsning i forskellige Rails-versioner (men du kan altid psql
BTW, hvis du virkelig ønsker SHA, så vil du se på
code>digest funktion fra pgcrypto
.