2015-12-07 2 views
1

С помощью следующего кода:Два правила сортировки в Grails

<g:each in="${books.sort{it.date}}" status="i" var="book"> 
    ${book} 
</g:each> 

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

Возможно ли это?

+0

Что вы пытаетесь сделать, это не сортировка, а комбинация сортировки (по дате) и приоритета (для входа в пользовательские записи). Причина в том, чтобы сказать, что именно так вы заведете заказ. Не могли бы вы привести пример ввода и вывода. Вы хотите, чтобы все зарегистрированные записи автора, независимо от даты или записи, все еще были отсортированы по дате, но первая запись для определенной даты должна быть зарегистрирована в авторском. –

ответ

1

Не уверен, чего вы хотите достичь, но вы можете это сделать. Прежде чем перейти ваш books список вашего GSP, вы можете написать так:

def myAction() { 
    List books = Book.list() // Get your book list 

    User loggedInUser = User.first() // Get your currently logged in user 

    // First get all the books of current user sorted by the date 
    List currentUsersBooks = books.findAll { it.author.id == loggedInUser.id }.sort{ it.date } 

    // Then get other books sorted by date 
    List otherBooks = books.findAll { it.author.id != loggedInUser.id }.sort{ it.date } 

    // Now merge all of them (as `List` will maintain insertion order) 
    // So current user's book will be listed first and then others 
    List allBooks = currentUsersBooks + otherBooks 

    [books: allBooks] 
} 

Теперь измените GSP, чтобы не сортировать снова:

<g:each in="${books}" status="i" var="book"> 
    ${book} 
</g:each> 

Учитывая, класс Book и User домен, как это :

class User { 
    String email 
} 

class Book { 
    Strig title 
    User author 
} 
+0

Спасибо, это сработало :) –

Смежные вопросы