0

私は、少数のChildrenドメインクラスが基本抽象ドメインクラスを拡張するGrailsアプリに取り組んでいます。また、多くの抽象ドメインクラスを持つ親ドメインクラスもあります。親に対して「grailsgenerate-all」を実行してから、多数の子を持つ親を作成すると、リストビューのリンクは、コントローラーまたはビューを持たない抽象ドメインクラスを指します。このビューを機能させる最も簡単な方法は何でしょうか。質問が少し曖昧な場合は、以下は物事をより明確にするのに役立ついくつかの擬似コードです。

ドメインクラス

abstract class Automobile{
    String description
}

class Car extends Automobile{}

class Truck extends Automobile{}

class Dealership{
   static hasMany = [automobiles:Automobile]
}

車とトラックでディーラーを作る

def car = new Car(description:"Toyota Camry").save()
def truck = new Truck(description : "Toyota Tacoma").save()

def dealership = new Dealership()
dealership.addToAutomobiles(car)
dealership.addToAutomobiles(truck)
dealership.save()

ディーラー用に生成されたshow.gspは、次のようになります。

<htm>
 <table>
  <tr>
    <th>Id</th>
    <td>${dealershipInstance.id}</td>
  </tr>
  <tr>
    <th>Automobiles</th>
    <td>
      <ul>
        <g:each in="${dealershipInstance.automobiles}" status="i" var="automobileInstance">
          <li><g:link action="show" id="${automobileInstance.id}">${automobileInstance.description}</g:link></li>
        </g:each>
      </ul>
    </td>
  </tr>
 </table>
</html>

基本抽象クラスAutomobileには独自のビューがないため、問題は自動車インスタンスへのリンクにあります。したがって、「表示」アクションは404を返します。この場合、適切なドメインクラスにリンクするための最良の方法は何でしょうか。これに対処する簡単な方法はおそらくありますが、私はそれを見つけていません。

助けてくれてありがとう。

4

2 に答える 2

1

gsp内にgroovyまたはjavaコードを記述しないようにするために、gsp内で簡単に参照できるようにクラス名を含む文字列変数を追加しました。

<g:link controller="${p.classname}" action="show" id="${p.id}">${p.description} ${p?.classname}</g:link>
于 2012-06-07T13:09:57.557 に答える
1

ありがとうクロトー。あなたの質問と回答は、あなたと同様の解決策に私を導きます。ただし、ドメイン クラスに classname プロパティを追加する必要はありません。それはすでにそこにあります。

class.simpleName を使用して、代わりに必要なものを取得してください。

例えば:

<g:link controller="${p.class.simpleName}" action="show" id="${p.id}">${p.description}</g:link>
于 2013-12-09T01:18:37.150 に答える