id は params に存在しますが、データベースには保存されません。例えば
[book.id:1, comments: good]
コメントは db に保存されますが、book.id は保存されません。
hasmany/belongsTo 関係から作成された db 列 BOOK_ID に params.book.id を保存する方法を理解する必要があります。
デフォルトでは、各要素の value 属性は、各要素の toString() 呼び出しの結果になります。これを optionKey として設定すると、値をリスト内の各要素の Bean プロパティにすることができます。
選択を次のように変更してください
<g:form action="review">
<g:select name="book.id"
from="${item.Book.list()}"
value="${book?.id}"
/>
<g:textField name="bookreview" value="${params?.bookreview}" /><br>
以下のリンクを参照してください
を上書きtoString
したため、ブックは常に によってレンダリングされname
、 ではありませんid
。メソッドを削除するtoString()
と、期待どおりの結果が得られます。
選択ボックスを名前で機能させたい場合は、追加するだけoptionValue="name"
です。
ドメイン内の重要なパラメータのスペルを間違えたようです。したがって、ドメインは x を予期していて、y を取得していました。したがって、id は常に null でした。それを見つけるのにしばらく時間がかかり、以前に別のプロジェクトで id の実装に成功したことがあったため、当惑しました。Grails には、別の可能性を考えさせる jira の問題もいくつかありますが、今回は私のミスでした。