Obs :Du vill förmodligen titta på brcebns svara om du använder en nyare version av Rails.
Rails kommer att försöka tolka detta:
t.string :uniqueid, default: md5(random()::text)
som Ruby-kod och :default => md5(...)
betyder ingenting i Ruby. Om du citerar det kommer Rails att tro att det är en sträng och gör standardvärdet för uniqueid
strängen 'md5(random()::text)'
och det kommer inte att hjälpa.
Om du vill använda ett funktionsanrop i en kolumnstandard kan du göra ändra tabell
för hand:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Det ger dig den standard du vill ha i databasen, men du kanske märker att det inte nämns något om den nya standarden i ditt schema.rb
. Om du vill ha ett användbart schema måste du använda ett SQL-schema istället genom att lägga in detta i ditt application.rb
:
config.active_record.schema_format = :sql
Ta sedan bort ditt schema.rb
och använd structure.sql
istället. Observera att SQL-schemadumpar var trasiga fram till 3.2 och det finns problem med schemaladdning i olika Rails-versioner (men du kan alltid psql
BTW, om du verkligen vill ha SHA så vill du titta på
code>sammandrag funktion från pgcrypto
.