私はgrailsを初めて使用し、1対多の関係を持つ小さなアプリケーションを構築しようとしていますが、立ち往生しています。
そのため、Artist、Album、Song の 3 つのドメイン クラスがあります。意図は、二重にネストされた 1->m 関係です。
アーティストは多くのアルバムを持つことができ、アルバムは多くの曲を持つことができます。
class Artist {
List albums = new ArrayList()
static hasMany = [albums: Album]
String artistName
static mapping = {
albums cascade:"all-delete-orphan"
}
}
class Album {
String albumName
String albumDescr
static belongsTo = [artist: Artist]
List songs = new ArrayList()
static hasMany = [songs: Song]
boolean deleted
static transients = [ 'deleted' ]
static mapping = {
songs cascade:"all-delete-orphan"
}
}
class Song{
Album album
static belongsTo = [album: Album]
String songName
Integer trackNumber
boolean deleted
static transients = [ 'deleted' ]
}
一連のフォームを使用してデータの入力を処理したいと考えています。最初のビューでは、関連付けられたアルバムでアーティストが作成されます。このビューは、ここで説明されているビューに似ています: http://omarello.com/2010/08/grails-one-to-many-dynamic-forms/
フォームを送信すると、アーティストと関連するアルバムが保存されます (次のようなもの)。
def artist = new Artist(params)
artistGroup.save()
ここに私が助けを必要としている部分があります...
次のビューでは、前のビューで作成されたアルバムが表示され、ユーザーはそれぞれの曲の情報を追加するように求められます。このフォームを送信すると、曲は保存されます。
保存したアルバムをフラッシュスコープで渡すと思っていました
flash.myAlbums = artist.albums
2 番目のビューに表示できるようにします。ただし、各曲を保存する (そしてそのアルバムを正しく関連付ける) には Album.id が必要になるため、アルバムの名前を表示することはストーリーの一部にすぎません。2 番目のフォームの送信時に各ソングを正しく保存するために使用できるように、この ID を 2 番目のビューに効果的に渡すにはどうすればよいでしょうか? この投稿を見たことがありますが、関連していますが、データの保存を複数のビューに分割しようとはしていません。
この質問がある程度理にかなっていることを願っています。これに対する代替アプローチを含むフィードバックに感謝します。