Hinweis :Sie möchten sich wahrscheinlich brcebns ansehen antworten, wenn Sie eine neuere Version von Rails verwenden.
Rails wird versuchen, dies zu interpretieren:
t.string :uniqueid, default: md5(random()::text)
als Ruby-Code und :default => md5(...)
bedeutet nichts in Ruby. Wenn Sie es in Anführungszeichen setzen, denkt Rails, dass es sich um einen String handelt, und macht den Standardwert für uniqueid
die Zeichenfolge 'md5(random()::text)'
und das wird nicht helfen.
Wenn Sie einen Funktionsaufruf in einem Spaltenstandard verwenden möchten, können Sie Tabelle ändern
per Hand:
connection.execute(%q{
alter table your_table alter column uniqueid set default md5(random()::text)
})
Dadurch erhalten Sie die gewünschte Standardeinstellung in der Datenbank, aber Sie werden möglicherweise feststellen, dass die neue Standardeinstellung in Ihrer schema.rb
nicht erwähnt wird . Wenn Sie ein verwendbares Schema wünschen, müssen Sie stattdessen ein SQL-Schema verwenden, indem Sie dies in Ihre application.rb
:
config.active_record.schema_format = :sql
Löschen Sie dann Ihre schema.rb
und verwenden Sie structure.sql
stattdessen. Beachten Sie, dass SQL-Schema-Dumps bis 3.2 fehlerhaft waren und es in verschiedenen Rails-Versionen Probleme beim Laden von Schemas gibt (aber Sie können immer psql
Übrigens, wenn Sie wirklich SHA wollen, sollten Sie sich pgcrypto