2012-02-10 3 views
6

Grails Scaffoldingを使って、いくつかのレガシーデータベーステーブル(これまでサガについてはthis previous StackOverflow questionを参照)でCRUDアプリケーションを一緒にスローしようとしました。私は今問題の最悪を過ぎており、機能するCRUDアプリを持っていますが、一般的な使いやすさには1つの問題が残っています。Grails外部キー関連のフレンドリーなラベル(IDキーの代わりに)を使った足場

私のドメインオブジェクトの多くは、他のドメインオブジェクトとの外部キー関連を持っています。 Contactは、Ownerに属しなど

しかし、ContactのためのCRUDページに、私はそれが人間のユーザには何の意味もないので... Ownerの実際のidキーを表示したくありません。代わりに画面に人にやさしいOwner.nameの値を表示します。

"list"と "show"ビューは、Viewの自動生成コード内のすべての属性を明示的に処理し、そのコードを調整して表示内容を制御することができます。ただし、「作成」ビューと「編集」ビューではすべての属性がリストされません。代わりに、これらのビューは、このようなGrailsのタグライブラリの呼び出しのいくつかの種類ます

... 
<fieldset class="form"> 
    <g:render template="form"/> 
</fieldset> 
... 

この呼び出しを明らかにフィールドがあり、それらを表示する方法についての独自の判断をするもの、実行時に自動的に検出。アソシエーションを持つドメインオブジェクトの場合、より人間に優しいアトリビュートではなく、関連付けられたオブジェクトの不器用なIDを表示するという悪い決定をします。

フィールドが「編集」ビューまたは「作成」ビューに表示される方法を変更するための「簡単」(または少なくとも「ベストプラクティス」)方法はありますか?確かにこれは、スカフォールドを使用すると関連があるドメインオブジェクトで使用されるときは常に共通の問題です。あなたがいるときに今

class Owner { 

    String id // not human-friendly 
    String name // human-friendly 
    // ...etc... 

    String toString() { 
     return name 
    } 
} 

+0

これは問題ですが、上記のコードスニペットは、そのドメインオブジェクトの自動生成ビューと同じディレクトリに自動生成された "_form.gsp"ファイルからHTMLを取得するだけです。 –

答えて

15

ああ、当たり前...あなたはそれはあなたが表示目的のために使用するフィールドを返した、関連するドメインオブジェクトの「toString()」メソッドを実装することができますアソシエーションのフィールドを持つContactのCRUDビューは、Owner.idではなくOwner.name属性または醜いオブジェクト参照ではなく、Owner.name属性です。

関連する問題