1

最近 Rails 3.2.3 から Rails 3.2.5 に移行し、Devise 2.0.4 を使用しています。私たちのアプリケーションでは、devise で omniauth を利用するためだけに、Devise コントローラーをオーバーライドしています。

Sign_UP で 3.2.3 バージョンを使用していた場合、3.2.5 に移行するとすぐにすべてが正常に機能してました。

その後resource.saveを試してみました!正確なエラーを取得できるように、次のエラーメッセージが発生しましたが、テーブルにはそのようなレコードがなく、現在のコンテンツも保存されていないため、これは真実ではありません

Completed 500 Internal Server Error in 1626644ms
ActiveRecord::RecordInvalid (Validation failed: User name has already been taken):

Devise 2.1 でも試してみましたが、同じ結果が得られました。

4

1 に答える 1

0

問題のある領域を見つけました。しかし、それは少し奇妙です 現在動作しているRails 3.2.3アプリでは、モデルにこの検証がありますが、これはRails 3.2.5では失敗しています

validates :user_name, :uniqueness => true

理由は - 「nil」としてのテーブル内の User_name はすでに利用可能であり、次に「user_name」を NIL として挿入しようとすると、NIL の一意性がチェックされ、そこで失敗します。

これを修正するために :allow_nil オプションを追加しましたが、それでも私の質問は、Rails 3.2.3 で失敗しなかった理由です。

validates :user_name, :uniqueness => true, :allow_nil => true
于 2012-06-05T07:45:12.917 に答える