2012-05-18 6 views
5

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に置いています。これは間違いなくバグのようです。

+0

これはテストでは失敗しましたか、この問題にどうやって遭遇しましたか?私は簡単な単体テストを設定しています。ユニークな制約が適切に働いています。 –

+0

@JarredOlsonこれは、アプリケーションを実行して、新しいユーザー(すでに取得したユーザー名を含む)を送信しようとすると失敗します。これは、本番環境で使用している1.3.7バージョンで正しく動作します。私はどのように格差を説明するか分からない。 – skaz

+0

Grailsアプリケーションが実行されているときに一意の制約を追加した後、それに関連した検証の問題が発生しました。 validate()は一意でない値については不平を言っていませんでした。これは、手動でターゲットディレクトリを削除してコンパイルするのに役立ちました。 – HumanInDisguise

答えて

0

私はドメインクラスがsrc/groovyであるため、これはバグだと思います。

3

1.3.7から2.0.3にアップグレードしている間、数日前に奇妙な確認の問題が発生しました。

私のためのトリックは、私の目標ディレクトリの手動クリアでしたか?どうやら、すべてのクラスを再コンパイルすると、アプリケーションは元の状態に戻ります。

あなたのケースではうまくいくかどうかわかりませんが、試してみる価値があります。

+0

Grailsアプリケーションが動作しているときに一意の制約を追加した後に、それに関連した検証の問題が発生しました。 validate()は一意でない値については不平を言っていませんでした。これは、手動でターゲットディレクトリを削除してコンパイルするのに役立ちました。 – HumanInDisguise

関連する問題