Observação :Você provavelmente quer ver brcebn's responda se estiver usando uma versão mais recente do Rails.
Rails tentará interpretar isso:
t.string :uniqueid, default: md5(random()::text)
como código Ruby e
:default => md5(...)
não significa nada em Ruby. Se você citá-lo, o Rails pensará que é uma string e tornará o valor padrão para uniqueid
a string 'md5(random()::text)'
e isso não vai ajudar. Se você quiser usar uma chamada de função em um padrão de coluna, você pode fazer o
alter table
à mão:connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Isso lhe dará o padrão que você deseja no banco de dados, mas você pode notar que não há menção ao novo padrão em seu
schema.rb
. Se você quiser um esquema utilizável, precisará usar um esquema SQL colocando-o em seu application.rb
:config.active_record.schema_format = :sql
Em seguida, exclua seu
schema.rb
e use structure.sql
em vez de. Observe que os dumps do esquema SQL foram interrompidos até a versão 3.2 e há problemas de carregamento do esquema em várias versões do Rails (mas você sempre pode psql < structure.sql
seu caminho em torno disso). No lado positivo, os dumps do esquema SQL manterão o controle de coisas extravagantes, chaves estrangeiras reais, verificarão restrições, gatilhos, ... BTW, se você realmente quer SHA, então você vai querer olhar para o
digest
função de pgcrypto
.