2

У меня есть домен три домена класса, как это:Как поставить ограничение на отношения в классе домена, в Grails?

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, я хочу поставить ограничение такого, что TasksstartDate и endDate не подпадают под User «s Holiday s startDate и endDate. И бросок и ошибка, если она есть.

Я хочу, чтобы установить это ограничение на мой класс домена (например, на Tasks).

Можно ли это сделать?

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

ответ

2

Вы можете выполнить это, используя специальный валидатор.

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

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

+2

Ницца! Вероятно, было бы лучше инкапсулировать часть этой логики в класс User, поэтому код станет более понятным и будет уважать Закон Деметры. Что-то вроде 'startDate (validator: {startDate, self -> self.user.canStartTaskAt (startDate)})' :) – epidemian

0

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

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

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