2014-09-01 12 views
0

У меня есть домен Grails, который выглядит следующим образомGrails домен переходных процессов и расчеты

User { 
    sortedSet notifications 
    static hasMany=[notifications:Notification] 
} 

Notification { 
    Date dateCreated 
    int status=0 
    static belongsTo=[user:User] 

    @Override 
    public int compareTo(obj) { 
    dateCreated.compareTo(obj.dateCreated) 
    } 
} 

Если я возвращаю «Пользователь» объект в GSP, есть ли способ, чтобы получить количество всех уведомлений, где статус = 1.

Например: user.notifications.size() (но где состояние = 1)

Без того, чтобы вернуть другой объект отдельные уведомления.

ответ

1

Вы упоминаете слово «переходные процессы» в названии, но нигде. Вы хотите объявить временную собственность, чтобы сделать что-то вроде этого? ...

class User { 
    SortedSet notifications 
    static hasMany=[notifications:Notification] 
    static transients = ['numberOfStatusOnes'] 

    int getNumberOfStatusOnes() { 
     notifications?.count { it.status == 1 } ?: 0 
    } 
} 
+0

Привет, спасибо, это лучшее решение! –

0

вы можете использовать namedQueries или так:

class User { 

    static hasMany=[notifications:Notification] 

    static namedQueries = { 
    notificationsByStatus{ int status = 1 -> 
     notifications{ 
     eq 'status', status 
     } 
    } 
    } 
} 

можно вызвать запрос так

User.notificationsByStatus.count() 
+0

привет, это близко ... «Уведомления» имеют подчеркивание ... например, он не может решить это? и когда я пытаюсь запустить программу и искать $ {user.notificationsByStatus}, она не может решить этого. «Нет такого свойства: notificationsByStatus для класса: tutor.com.User» –

+0

$ {user.notificationsByStatus} не должен работать вообще. вы должны вызывать '$ {user.notificationsByStatus.count()}' или '$ {user.notificationsByStatus.list()}' – injecteer

+0

, какую версию grails вы используете? – injecteer

0

Если я возвращаю «Пользователь» объект в GSP, есть ли способ получите всех ваших уведомлений, если статус = 1

Поскольку вы возвращаете User в GSP, я предполагаю, что есть причина, по которой вы хотите, чтобы этот объект и построил другой запрос, который возвращает только уведомления о статусе 1, не то, что вы хотите. Вместо этого вы можете просто допросить User и получить нужную информацию.

В контроллере, который retriving объект пользователя вы можете сделать что-то вроде этого:

def someAction() { 
    User u = // you got your user from somewhere: 
    int numberOfStatusOnes = u.notifications.count { it.status == 1 } 

    [user: u, numberOfStatusOnes: numberOfStatusOnes] 
} 

Затем в GSP, когда вы ссылаетесь user, который будет экземпляром User класса, и когда вы смотрите numberOfStatusOnes это будет число, которое показывает, сколько Notification сек, что User имеет которые имеют status из 1.

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