Как ограничить отношения в доменном классе в Grails? - PullRequest
2 голосов
/ 24 февраля 2012

У меня есть домен три класса домена, как это:

Tasks.groovy

class Tasks {
    static belongsTo = [ user : User ]
        //other fields
    Date startDate
    Date endDate
}

User.groovy

class User {
    //relationships. . . .
    static belongsTo = [ company : Company, role : Role, resource : Resource]
    static hasMany = [ holidays : Holiday, tasks : Tasks]
    //other fields
    }

Holiday.groovy

class Holiday {
    static belongsTo = User
    Date startDate
    Date endDate
    //other fields
}

Теперь, когда я создаю экземпляр Tasks, я хочу установить ограничение таким образом, чтобы Tasks startDate и endDate не попадали в User Holiday s startDate и endDate. И скинуть и ошибку, если есть.

Мне нужен способ наложить это ограничение на сам класс моего домена (т.е. на Tasks).

Возможно ли это сделать?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Вы можете сделать это с помощью пользовательского валидатора.

startDate(validator: {val, obj->
    obj.user.holidays.every{holiday-> val <= holiday.startDate || val >= holiday.endDate }
})

Вы можете инкапсулировать свою логику валидации в качестве замыкания.Вам также нужно добавить аналогичную логику для endDate.

0 голосов
/ 24 февраля 2012

Я бы пошел с наличием функции createTask в Домене пользователя, поскольку Задача не должна возиться с переменными, которые до сих пор удалены (self -> User -> Holiday -> startDate).

Совершенно очевидно, что пользователь знает, когда его отпуск начинается и заканчивается, и, таким образом, он легко проверяет заданные даты начала и окончания новой задачи.

...