2011-07-24 3 views
1

Grailsは:ページングとの関係でコレクションを並べ替え、私は以下のモデルで例えば関係</p> <p>でコレクションからのページングやソートを行うにはしたいと思い

class User { 
    String userName, password 
    static hasMany = [roles: UserRole, preferences: Preference] 
} 

class UserRole { 
    String name, description 

    static hasMany = [actions: Action] 
} 

私は思います特定のユーザーのすべての役割を回復するのが好きです。私はすでにそれを行うには、通常の方法が

user.roles 

を使用されるだろうように、ユーザーがロードされている。しかし、私は、私がしたい場合ことを知っている私はUserRole性質によってそれらをソートしたいと私は動的に

それらをページ分割したいですすべてUserRole sがソートされ、ページ分割を取得私が使用することができます。

UserRole.list([sort: 'name', order: 'asc',max: 5,offset:0]) 

しかし、私はちょうど私のユーザーに関連付けられている役割のためにそれをやってみたいです。私は基準を使用しようとしていましたが、私は何かが欠けていると思います。私は持っているでしょう http://grails.1312388.n4.nabble.com/A-Relationship-Paging-Pattern-td1326643.html

しかし、私は戻ってUserRoleに関係を追加する必要があります:

は、私もここで見ていた

static hasMany = [users : UserRole] 

私はこれをどのように行うことができます

?何が最善の方法だろうか?

してください、あなたはより多くの情報と申し訳ありませんが必要な場合、私はあなたが「普通」の関係をページ分割することはできません

おかげに関して

+0

こんにちは@BurtBeckwith、書式設定を固定に感謝です:)それについて申し訳ありません – rodrigogp

答えて

2

十分に明確ではなかったなら、私に知らせてください。

あなたはmapping DSLを使用して子オブジェクトが表示される順序を変更することができます。

static mapping = { 
    sort name:desc 
} 

は手作りのページ分割の関係を単純化するには、名前付きクエリを使用することができます

class Role { 
    static namedQueries = { 
     userRoles { 
      eq('user', UserSessionService.instance.currentUser) 
     } 
    } 
} 

をそれとも、実装することができますUserUserのプロパティは、UserRole(ページ指定可能)の場合にCriteriaを返します。

+0

こんにちはビクター、あなたの迅速な対応に感謝します。私が取り組んでいるアプリはCRUDアプリです。だから私は既存のユーザーとのマスターテーブルがあります。 1ユーザーを選択すると、詳細が表示されます。詳細には、とりわけ、このユーザーに関連付けられたロールを持つテーブルを表示する必要があります。次に、選択した列ヘッダーに応じて、さまざまなフィールドでDBのこのロールテーブルを並べ替えることができるようにしたいと思います。結果を改ページしたいと思います。関係を双方向にすることなく基準を使ってこれを行う方法はありませんか? – rodrigogp

+0

さらに、私の場合、静的hasMany [users:User]をUserRoleクラスに追加する必要があると思います。双方向で静的belongsTo [User] – rodrigogp

+0

にしたい場合は、1.関係を双方向にする必要はありません。必要な側に 'belongsTo'または' hasMany'を追加するだけです。 2.ユーザーの 'id'を' listRoles'アクションに渡し、 'g:paginate'と' g:sortableColumn'の 'params'に同じ' id'を追加することを忘れないでください。 3.とにかく、完全なサンプルではコメントが短すぎます。 –

0

Grailsはhasmany関係でページ分割します。双方向性のプロパティは、最終的に私はHuuuhが動作していることがわかりました。

これらは、ドメインクラス

class Client { 
    List bills 
    String shopName 
    String nameOfClient 
    static hasMany = [bills: Bill] 

    static constraints = { 
     shopName(blank:true, nullable:true) 
     nameOfClient(blank:false, nullable:false)  

    } 

} 

class Bill { 
    String billDetails 
    String billNo  
    static belongsTo = [client: Client] 

    static constraints = { 
     billDetails(blank:true, nullable:true , type: 'text')  
     billNo(blank:true, nullable:true) 

    } 

} 

ている今、これは私のコントローラロジック

def clientDetails(){ 
    def maxJobs = 4 
    def offset = (params?.offset) ?: 0 
    def clientId = params.id 
    def bills = Client.get(clientId).bills 
    def client= Client.get(clientId) 
    def results = Bill.withCriteria { 
     eq('client', client) 
     firstResult(offset as Integer) 
     maxResults(maxJobs) 
    } 

    [id:client.id,bills: results, offset: offset, max: maxJobs, totalJobs: bills.size()] 
} 

そしてGSPのコード

<g:each in="${bills}"> 
     <tr> 
      <td>${it.billNo}</td> 
      <td>${it.billDetails}</td>   
     </tr> 
</g:each> 



<g:paginate class="pagination" controller="client" action="clientDetails" total="${totalJobs?:0}" offset="${offset}" max="${max}" params="[id:"${id}"]" 
       prev="&laquo; Previous" next="Next &raquo;" /> 
関連する問題