3

私は最初の Rails アプリを構築していますが、この奇妙な問題に直面しています。私は、私にとって非常に便利な ENUM タイプをサポートする Postgres を使用しています。ただし、Rails はこれをサポートしていないため、移行では多くの「execute」を使用しています。それらはすべて正常に実行され、機能しているようです。私のデータベースは、pgAdmin を使って調べてみると、ちょうどいい状態です。users現在、テーブルで3 つの ENUM 型を使用しています。

gender ('female', 'male')
interested_in ('men', 'women', 'men_and_women')
relationship_status ('single', ..., 'divorced')

アプリケーション側では、classy_enum gem を使用しています。次に、ユーザー プロファイルを更新して、すべてが機能しているかどうかを確認してみました。interested_in最初は、いくつかの異なるロジックがあったため、編集プロファイルフォームから削除しました。すべてがうまくいきました。次に、 を追加interested_inし、新しいタイプのロジックを更新して、フォームを再度送信しました。このエラーが発生しました:

PG::InvalidTextRepresentation: ERROR: invalid input value for enum interested_in: "0" :
UPDATE "users" SET "interested_in" = $1, "remember_token" = $2, "updated_at" = $3 WHERE "users"."id" = 1

このオプションを含まない列挙型フィールドに 0 を保存しようとすると、明らかに失敗します。だから、初めて同様のエラーを見たとき、「この 0 は一体どこから来ているの??」と思いました。しかし、Rails は値を保存する前に整数に変換していたことが判明し、数値以外の文字を含む文字列を変換するたびに、結果は 0 になります。それが再び起こっていると思います。そこで私はコンソールに行き、次のように入力しました:

2.0.0p247 :001 > User.columns_hash['interested_in'].type
 => :integer

同じコマンド for を実行してgendernilrelationship_statusを取得すると、Rails が ENUM 型を認識しないため、意味があります。

2.0.0p247 :007 > User.columns_hash['gender'].type
 => nil

pgAdminには次のものがあります:

ここに画像の説明を入力

ここに画像の説明を入力

それぞれ。

postgres サーバーである Web サーバー (Pow) を再起動しようとしましたが、タイプがまだ一致しません。これはどのように可能ですか?Rails データベース アダプターはどのように機能しますか? この混乱した状況を解決するにはどうすればよいでしょうか?

4

2 に答える 2

0

次の Github リポジトリ リンクをご覧ください。それがどのライセンスの下でリリースされているのかわからないので、実装のアイデアを参照するときは注意してください。

于 2013-08-16T02:27:15.120 に答える