Poznámka :Pravděpodobně se budete chtít podívat na brcebn's odpovězte, pokud používáte novější verzi Rails.
Rails se to pokusí interpretovat:
t.string :uniqueid, default: md5(random()::text)
jako kód Ruby a :default => md5(...)
v Ruby nic neznamená. Pokud jej uvedete, Rails si bude myslet, že se jedná o řetězec, a nastaví výchozí hodnotu pro uniqueid
řetězec 'md5(random()::text)'
a to nepomůže.
Pokud chcete použít volání funkce ve výchozím nastavení sloupce, můžete provést alter table
ručně:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Tím získáte výchozí nastavení, které chcete v databázi, ale můžete si všimnout, že ve vašem schema.rb
není žádná zmínka o novém výchozím nastavení. . Pokud chcete použitelné schéma, budete muset místo toho použít schéma SQL tak, že toto vložíte do application.rb
:
config.active_record.schema_format = :sql
Poté smažte schema.rb
a použijte structure.sql
namísto. Všimněte si, že výpisy schémat SQL byly poškozeny až do verze 3.2 a v různých verzích Rails dochází k problémům s načítáním schématu (ale vždy můžete psql < structure.sql
jak to obejít). Na druhou stranu, výpisy schémat SQL budou sledovat efektní věci skutečné cizí klíče, kontrolovat omezení, spouštěče, ...
BTW, pokud opravdu chcete SHA, pak se budete chtít podívat na digest
funkce z pgcrypto
.