나는 NameAndAddress라는 도메인 클래스를 가지고있다. 각각은 음악가 또는 커뮤니티 회원이 될 수 있지만 둘 다일 수는 없습니다.Grails : 필드 확인중인 항목이 이미 다른 도메인 클래스에 추가되었는지 어떻게 확인합니까?
class NameAndAddress {
...
}
class Musician {
NameAndAddress nameAndAddress
}
class CommunityMember {
NameAndAddress nameAndAddress
}
위의 규칙을 확인하면서 양쪽에 유효성 검사기를 추가하고 싶습니다. 나는 음악가로 시작 :
class Musician {
NameAndAddress nameAndAddress
static constraints = {
nameAndAddress(validator: { thisField ->
return (CommunityMember.findByNameAndAddress(thisField) == null) ? true : false
})
}
}
내가 얻을하지만 나는 뮤지션에 대한 유효성 검사를() 실행하면 :
groovy.lang.MissingMethodException: No signature of method: CommunityMember.findByNameAndAddress() is applicable for argument types: (NameAndAddress) values: [NameAndAddress : 1]
Possible solutions: findByNameAndAddress([Ljava.lang.Object;)
내가 오류를 이해하지 않습니다. NameAndAddress 객체가 기대하는 것 ... NameAndAddress 객체에 부여하는 것이 유효하지 않다고 말하는 것이 아닙니까?
이 기능을 사용하려면 어떻게해야합니까?
편집 :
(해결 방법) - 아직 방법보다 사용하여 작동하지 않습니다. @sudhir이 지적한 추악한 해결 방법을 통해 성능이 저하되었습니다.
nameAndAddress(validator: { thisField, thisObject ->
boolean notACommunityMember = true
for (CommunityMember communityMember : CommunityMember.list()) {
if (communityMember.getNameAndAddress().getId() == thisField.getId()) {
notACommunityMember = false
break
}
}
return notACommunityMember
})
Edit2가 : 그 사람이 내가 깨끗한 방법으로 할 노력하고있어 이해하는 데 도움이 경우이 코드는,하지만 작동 않습니다는
(단위 테스트 코드에 의해 요청, 확인 전화 의견) -
@TestMixin(DomainClassUnitTestMixin)
class MusicianTest ...
NameAndAddress aNameAndAddress = new NameAndAddress()
mockDomain(CommunityMember, [
[nameAndAddress: aNameAndAddress]
])
Musician musician = new Musician(nameAndAddress: aNameAndAddress)
musician.validate()
assert musician.errors["nameAndAddress"] != null
(성능 적중률이 될 것입니다) CommunityMember 목록을 반복합니다. - (CommunityMember.findByPerson (this)) {notACommunityMember} –
감사합니다. 그것은 수표를 찍는 훨씬 더 좋은 방법입니다. 나는 지난 밤에 너무 늦었 어. 그리고 그것은 지금 명백한 의미가있다. – Bukov
나는 여전히 오류가 발생하고 있지만, 나는 그것이 내 시험 수업에서 잘못 조롱 한 것과 관련이 있다는 것을 확신한다. – Bukov