2

私のgrails 1.1アプリにはおおよそ次のものがあります

class AppCategory {
    static belongsTo = App
    static hasMany   = [ apps: App ]
    String name
}

class App {
    static hasMany = [ categories: AppCategory]
    String name
}

App app = new App()
AppCategory appCat = AppCategory.findByName('blah')
app.addToCategories(appCat)
app.save()

正しいテーブル (app、app_category、app_categories) が作成され、列はすべて問題ないように見えますが、関連付けテーブルにレコードがなく、エラーも発生しません。app_category テーブルと app テーブルが正しく設定されています。

関連付けテーブルのドメイン オブジェクトを手動で管理する必要がありますか? それとも、完全に明らかな何かが欠けているだけですか?

4

1 に答える 1

6

上記の例で表現されていないことの 1 つは、必須フィールドであるにもかかわらず、App インスタンスに名前を付けていないことです (grails フィールドは、明示的に指定しない限り、デフォルトで nullable:false です)。確認したらきっと

app.hasErrors()

app.save() の後、app.errors コレクションにリストできるエラーがあることがわかります。

それ以外の場合は、あなたが持っているものは問題ありません。このコードは、上記のドメイン オブジェクトでうまく機能しました。

AppCategory appCat = new AppCategory(name: "blah")    
appCat.save()    
assert !appCat.hasErrors()


App app = new App(name: "testApp")
app.addToCategories(appCat)    
app.save()    
assert !app.hasErrors()
于 2009-05-24T22:52:22.520 に答える