1

User モデルで 2 つの列が一意であることを検証しようとしています。私はGoogleを検索しましたが、次のコードは機能しないと理解しています:

validates :login, :uniqueness=>true
validates :email, :uniqueness=>true

私の場合、これを行うと、電子メールの一意性は検証されますが、ログインの一意性は検証されません。ログインはデータベース上で一意でなければならないと設定しました。ただし、実行時エラーが既に存在する場合は実行時エラーが生成されるだけです。ユーザーが理解できない500内部サーバーエラーが発生するため、本番環境でそのエラーが発生することは望ましくありません。

これらのフィールドの両方の一意性を検証する方法についてのアイデアはありますか?

使用される認証:

  • カンカン
  • 工夫する
  • 招待可能な工夫

アップデート:

私が言えることから、問題はDevise、特に電子メールとパスワードを検証する検証可能なモジュールによって引き起こされていることがわかります。

更新 2:

Devise から検証可能なモジュールを削除すると、一意性のチェックも行われなくなります。

更新 3:

デバイスが問題の原因ではないようです。むしろ、Devise Invitable という宝石です。この gem を削除すると、検証がトリガーされます。また、この gem はメール フィールドの検証を強制しようとしているようです。この gem の性質上、これは理にかなっていますが、ブロックするべきではありません。

4

3 に答える 3

9

scopedeviseによるデフォルトの検証に追加して、でそれを行うことができるはずです。

Rails 3 バージョンの場合:

validates :email, :uniqueness => {:scope => :login}

参照:

于 2012-10-19T17:05:40.797 に答える
0

問題は devise_invitable gem にありました。デバイス初期化子で設定する必要がありました

  config.validate_on_invite = true

検証が実行されたことを確認するため、デフォルトは false です。また、デバイスの検証可能なモジュールを削除する必要がありました。

于 2012-10-19T20:07:54.703 に答える
0

コードはRails 3.2.8で完全に正常に動作します..私はそれでテストしました...

あなたの宝石に問題があるかもしれません...

于 2012-10-20T06:14:45.620 に答える