16

GORMを使用してUserオブジェクトを定義したとしましょう。各ユーザーは、0個以上のログインを持つことができます。各ログインにはタイムスタンプがあります。user.loginsを取得するときに、login.dateの値に基づいてログインをソートする必要があります。これを達成するための正しいGrailsの方法は何ですか?

例:次のコードで、すべてのユーザーのログインを昇順で一覧表示します。

<g:each var="login" in="${user.logins}">
  <tr>
    <td>${login.date}</td>
  </tr>
</g:each>

参照されるクラスは次のとおりです。

class User {
  ...
  def hasMany = [logins: Login]
  static fetchMode = [logins: "eager"]
}

class Login {
  Date date
  ...
  def belongsTo = [User]
}

最新の安定版リリースであるGrails1.0.4を実行しています。

4

3 に答える 3

28

リファレンス ガイド (セクション 5) の GORM ページでこれを行う方法を示します。そのドキュメントの下部近くにある必要なビットは、必要なセクションです。2 つの簡単な例があります。

class Airport {
    …
    static mapping = {
        sort "name"
    }
}

class Airport {
    …
    static mapping = {
        sort name:"desc"
    }
}

また、関連付けでソートする例もあります。

class Airport {
    …
    static hasMany = [flights:Flight]
    static mapping = {
        flights sort:'number'
    }
}
于 2009-05-27T22:31:16.237 に答える
14

ログイン クラスに Comparable インターフェイスを実装させるだけです。

class Login implements Comparable {

    // ...

    Date date

    public int compareTo(def other) {
        return date <=> other?.date // <=> is the compareTo operator in groovy
    }

}

リレーションを SortedSet として宣言します。

class User {
  ...
  def hasMany = [logins: Login]               
  SortedSet logins

  static fetchMode = [logins: "eager"]
}
于 2009-02-06T13:42:48.683 に答える
8

Grails/GORM でのデフォルトのソート順の処理は、Grails 1.1 で大幅に簡素化されたようです。

于 2009-03-10T18:23:16.777 に答える