ハイフンなしの生成されたUUIDにデフォルトで設定されているカラムをvarchar(32)として追加しようとしています。Postgres関数で制限とデフォルトを持つadd_columnをレンダリングする
add_column :users, :uuid, :string, limit: 32, default: "REPLACE(uuid_generate_v4(), '-', '')"
しかし、単なる文字列をテキストとしてという設定だので、出てエラーに思える:現在、これは私の移行が持っているものである
PG::StringDataRightTruncation: ERROR: value too long for type character varying(32)
私は、デフォルトの設定の適切な文書を見つけることができないようSQL文に値が、Railsの5で行う方が簡単かもしれないと(https://github.com/rails/rails/pull/20005)
だろうと実行?私の例は、postgres関数であり、ルビではありませんでしたが、Rubyで行う方法は、 'self.uuid || = SecureRandom.uuid.gsub(" - "、" ")'で 'before_create'あなたが手動で設定することができるように、 '||'を使います)。私はたいてい、物事のポストグル側でそれをやることに興味があります –
あなたは完全に正しいです。私はその機能について考えていない、私はちょうどあなたの例からコピーしていた。あなたがpostgresqlを使用しているので(あなたのエラーステートメントによって明らかにされているように)、私はあなたの解決策を見つけ、私の答えを更新しました。 – John
Active Recordは、そのリンク全体を読んで、実際には多くのpostgresql固有の機能をサポートしています。 – John