Grails 1.3.7アプリケーションを2.0.3にアップグレードする過程で、ほとんどの問題を修正しました。しかし、私は、ユーザーを作成してデータベースに保存するコードを使用していました。すでに実行されているユーザー名を再利用しており、ユーザー名に固有の制約があるため、コードは検証に合格しません。 .validate()
はtrueを返しますが、user.save()
がMySql固有の制約エラーで呼び出されたときにコードが実際に爆発します。 User.groovyでGrails検証がアップグレード後に機能しない
def submitSignup = {
def user = new User(params)
user.validate()
if (!user.hasErrors()) {
...
// This line bombs with the MySql unique constraint I would have expected .validate() to get
user.save()
}
}
:
static constraints = {
username(blank: false, unique: true);
...
}
任意のアイデア
はエラーをスローする必要がありますか?
編集:AcegiのSpring Securityプラグインにもアップグレードしています。私はこれが関係するとは思わないが、私はそれを言いたいと思った。
私はこの問題を抱えているサンプルをhttps://github.com/skazzaks/Grails-Unique-Testに置いています。これは間違いなくバグのようです。
これはテストでは失敗しましたか、この問題にどうやって遭遇しましたか?私は簡単な単体テストを設定しています。ユニークな制約が適切に働いています。 –
@JarredOlsonこれは、アプリケーションを実行して、新しいユーザー(すでに取得したユーザー名を含む)を送信しようとすると失敗します。これは、本番環境で使用している1.3.7バージョンで正しく動作します。私はどのように格差を説明するか分からない。 – skaz
Grailsアプリケーションが実行されているときに一意の制約を追加した後、それに関連した検証の問題が発生しました。 validate()は一意でない値については不平を言っていませんでした。これは、手動でターゲットディレクトリを削除してコンパイルするのに役立ちました。 – HumanInDisguise