はシナリオ1:belongsToのは
ポスト:
class Post {
String content
Date dateCreated
static constraints = {
content(blank: false)
}
static belongsTo = [ user : User ]
}
ユーザー:
class User {
// existing code here
static hasMany = [ posts : Post ]
}
その古典1 は、私は2つのクラスを持っています何かの関係。これらのクラスの統合テスト:
void testFirstPost() {
def user = new User(userId: 'joe',password: 'secret').save()
def post1 = new Post(content: "First post... W00t!")
user.addToPosts(post1)
def post2 = new Post(content: "Second post...")
user.addToPosts(post2) }
非常にうまく動作します。しかし、あなたのような他の二つのクラスを検討している場合:
シナリオ2:
ユーザー:
class User {
String login
String password
Profile profile
Status status
static hasMany = [ holidays : Holiday ]
static constraints = {
login(unique:true,size:2..20)
password(size:2..20) //more to be added later!
profile(nullable:true)
company(nullable:true)
}
static belongsTo = [ company : Company ]
}
会社を:古典ワン再び
class Company {
String shortName;
String name
Date dateCreated
String region
String email
Address address
Status status
Long tel
Long fax
static hasMany = [ users : User]
static constraints = {
}
static mapping = {
address lazy:false
status lazy:false
}
}
多くの関係。
は、これらのクラスのために、私はこのようなテストを書かれている:
void testSaveUser() {
def status1 = new Status(name:"Busy")
status1.save(flush:true)
def user = new User(login:"anto",password:"anything",
status:status1)
assert user.save(flush:true, failOnError: true)
}
であっても、このテストが正常に動作します。 の2番目のUser
クラスでは、company
フィールドの制約をcompany(nullable:true)
として作成しましたが、これを入れなかった場合は、上記のテスト(testSaveUser()
)が失敗します。
私は取得していますエラーはこれです:
Validation Error(s) occurred during save(): - Field error in object 'mnm.User' on field 'company': rejected value [null]; codes [mnm.User.company.nullable.error.mnm.User.company,mnm.User.company.nullable.error.company,mnm.User.company.nullable.error.mnm.Company,mnm.User.company.nullable.error,user.company.nullable.error.mnm.User.company,user.company.nullable.error.company,user.company.nullable.error.mnm.Company,user.company.nullable.error,mnm.User.company.nullable.mnm.User.company,mnm.User.company.nullable.company,mnm.User.company.nullable.mnm.Company,mnm.User.company.nullable,user.company.nullable.mnm.User.company,user.company.nullable.company,user.company.nullable.mnm.Company,user.company.nullable,nullable.mnm.User.company,nullable.company,nullable.mnm.Company,nullable]; arguments [company,class mnm.User]; default message [Property [{0}] of class [{1}] cannot be null]
grails.validation.ValidationException: Validation Error(s) occurred during save():
- Field error in object 'mnm.User' on field 'company': rejected value [null]; codes [mnm.User.company.nullable.error.mnm.User.company,mnm.User.company.nullable.error.company,mnm.User.company.nullable.error.mnm.Company,mnm.User.company.nullable.error,user.company.nullable.error.mnm.User.company,user.company.nullable.error.company,user.company.nullable.error.mnm.Company,user.company.nullable.error,mnm.User.company.nullable.mnm.User.company,mnm.User.company.nullable.company,mnm.User.company.nullable.mnm.Company,mnm.User.company.nullable,user.company.nullable.mnm.User.company,user.company.nullable.company,user.company.nullable.mnm.Company,user.company.nullable,nullable.mnm.User.company,nullable.company,nullable.mnm.Company,nullable]; arguments [company,class mnm.User]; default message [Property [{0}] of class [{1}] cannot be null]
at mnm.UserIntegrationTests.testSaveUser(UserIntegrationTests.groovy:18)
シナリオ2がcompany(nullable:true)
制約を追加するために私を強制しない理由の両方シナリオ1とシナリオ2はが同じであっても?
(私はのGrails 1.3.7を使用し、同じバージョンの2つのシナリオを実行したんだということに注意してください!)事前に
感謝。
ああ、もう一度私はこのルールを忘れています。今それは感謝tim_yatesさんの作品:) –