Grails: просмотр и сортировка коллекции в отношениях - PullRequest
1 голос
/ 25 июля 2011

Я хотел бы выполнить разбиение на страницы и сортировку из коллекции в отношениях

Например, со следующей моделью:

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

class UserRole {
   String name, description

   static hasMany = [actions: Action]
}

Я хочу восстановить все роли дляконкретный пользователь.У меня уже есть пользователь, загруженный, поэтому обычным способом сделать это было бы использование

user.roles

Но я хочу отсортировать их по UserRole свойствам и хочу разбить их на страницы динамически

IЯ знаю, что если я хочу отсортировать все UserRole и разбить их на страницы, я могу использовать:

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]

Как я могу это сделать?что будет лучшим способом?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и извините, если я не достаточно ясно

Спасибо и с уважением

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Вы не можете разбить на страницы "обычные" отношения.

Вы можете изменить порядок отображения дочерних объектов при использовании mapping DSL :

static mapping = {
    sort name:desc
}

Для упрощения рукиВы можете использовать именованный запрос:

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

. Или вы можете реализовать переходное свойство User, которое будет возвращать Criteria для User 'Role s.(который может быть разбит на страницы).

0 голосов
/ 04 марта 2017

Grails Pagination с отношением 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;" />
...