Забележка :Вероятно искате да разгледате brcebn's отговорете, ако използвате по-нова версия на Rails.
Rails ще се опита да интерпретира това:
t.string :uniqueid, default: md5(random()::text)
като Ruby код и :default => md5(...)
не означава нищо в Ruby. Ако го цитирате, тогава Rails ще помисли, че е низ и ще направи стойността по подразбиране за uniqueid
низът 'md5(random()::text)'
и това няма да помогне.
Ако искате да използвате извикване на функция в колона по подразбиране, можете да направите alter table
на ръка:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Това ще ви осигури желаното по подразбиране в базата данни, но може да забележите, че не се споменава новото по подразбиране във вашия schema.rb
. Ако искате използваема схема, тогава ще трябва да използвате вместо това SQL схема, като поставите това във вашия application.rb
:
config.active_record.schema_format = :sql
След това изтрийте своя schema.rb
и използвайте structure.sql
вместо. Обърнете внимание, че изхвърлянията на SQL схеми бяха повредени до 3.2 и има проблеми със зареждането на схеми в различни версии на Rails (но винаги можете да psql < structure.sql
вашият път около това). От друга страна, изхвърлянията на SQL схеми ще следят фантастични неща, истински външни ключове, ограничения за проверка, тригери, ...
Между другото, ако наистина искате SHA, ще искате да погледнете digest
функция от pgcrypto
.