私は単純な階層を持っています:
class Atom {}
class Text extends Atom { String value}
class Unit {
List atoms
static hasMany = [ atoms:Atom ]
}
1つのTextオブジェクトと1つのUnitオブジェクトを作成し、Textの親としてUnitを選択するとします。正常に動作します。Unitでshowメソッドを呼び出すと、Unitが1つのAtomで構成されていることがわかります。このアトムをクリックすると、アトムコントローラーにリダイレクトされますが、実際にはアトムはテキストであり、テキストコントローラーが表示されます。私のshow.gspには次のようなコードがあるため、これは予想される動作です。
<g:each in="${unitInstance.atoms}" var="a">
<span class="property-value" aria-labelledby="atoms-label">
<g:link controller="atom" action="show" id="${a.id}">
${a?.encodeAsHTML()}
</g:link>
</span>
</g:each>
さて、データベースは実際の原子タイプをフィールド「class」に格納しているので、3行目を編集しました。
<g:link controller="${a.class}" action="show" id="${a.id}">
そして、${a.class}は常にアトムを返します。だから、私の質問は-実際のクラス名を取得するにはどうすればよいですか?