Catatan :Anda mungkin ingin melihat brcebn's jawab jika Anda menggunakan versi Rails yang lebih baru.
Rails akan mencoba menafsirkan ini:
t.string :uniqueid, default: md5(random()::text)
sebagai kode Ruby dan :default => md5(...)
tidak berarti apa-apa di Ruby. Jika Anda mengutipnya, maka Rails akan menganggapnya sebagai string dan menjadikan nilai default untuk uniqueid
string 'md5(random()::text)'
dan itu tidak akan membantu.
Jika Anda ingin menggunakan pemanggilan fungsi di kolom default, Anda dapat melakukan alter table
dengan tangan:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Itu akan memberi Anda default yang Anda inginkan dalam database tetapi Anda mungkin memperhatikan bahwa tidak ada penyebutan default baru di schema.rb
Anda . Jika Anda menginginkan skema yang dapat digunakan maka Anda harus menggunakan skema SQL dengan meletakkan ini di application.rb
:
config.active_record.schema_format = :sql
Kemudian hapus schema.rb
Anda dan gunakan structure.sql
alih-alih. Perhatikan bahwa dump skema SQL rusak hingga 3.2 dan ada masalah pemuatan skema di berbagai versi Rails (tetapi Anda selalu dapat psql < structure.sql
jalan sekitar itu). Sisi baiknya, dump skema SQL akan melacak hal-hal mewah kunci asing nyata, memeriksa batasan, pemicu, ...
BTW, jika Anda benar-benar menginginkan SHA maka Anda harus melihat digest
fungsi dari pgcrypto
.