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);
...
}
어떤 아이디어
에서 오류가 발생 하는가?
EDIT : Acegi의 Spring Security 플러그인으로 업그레이드 중입니다. 나는 이것이 적절하다고 생각하지 않지만, 나는 그것을 언급 할 것이라고 생각했다.
문제가있는 샘플을 https://github.com/skazzaks/Grails-Unique-Test에 올려 놓았으니 분명히 버그처럼 보입니다.
테스트에서이 문제가 발생하지 않았습니까? 아니면이 문제를 어떻게 제기 했습니까? 간단한 단위 테스트를 설정하고 고유 한 제약 조건이 제대로 작동하고 있습니다. –
@JarredOlson 이것은 응용 프로그램을 실행하고 새로운 사용자 (사용자 이름이 이미 사용됨)를 제출하려고 할 때 실패합니다. 이것은 프로덕션 환경에있는 1.3.7 버전에서 올바르게 작동합니다. 불균형을 어떻게 설명해야할지 모르겠습니다. – skaz
Grails 애플리케이션이 실행되는 동안 고유 제한 조건을 추가 한 후 다소 관련 검증 문제가 발생했습니다. validate()는 고유하지 않은 값에 대해 불평하지 않았습니다. 그것은 청소, 수동으로 대상 디렉토리를 삭제하고 컴파일하는 데 도움이되었습니다. – HumanInDisguise