基于父日期

时间:2016-03-30 15:19:18

标签: validation grails

我有一个具有典型开始和结束日期的域名(Travel),并且验证工作不用担心。问题在于子域(目的地),其中一个旅行可以有许多目的地,我无法获得自定义验证以拒绝旅行的总体开始和结束日期之外的开始和结束日期。有没有办法根据val> Travel.endDate进行自定义验证?

startDate blank: true, nullable: true, validator: { 
        val, obj -> if (!val) ['startDateEmpty']
        if (val>Travel.startDate) return ['invalidStartTripDate']
    }
endDate blank: true, nullable: true, validator: { 
        val, obj -> if (!val) ['endDateEmpty']
        if (val<obj.startDate) return ['invalidDates']
        if (val>Travel.endDate) return ['invalidEndTripDate']
} 

我尝试了上面的代码,但invalidEndTripDate和invalidStartTripDate会导致其他验证失败。目的地也属于(旅行)。谢谢你的帮助!

编辑:对于那些问过这些域名的人来说

class Travel {

static hasMany = [destinations: TravelDestination]

User user
Integer id
String tripName
Date startDate
Date endDate

static mapping = {
    table 'travel'
    id generator: 'identity'
    version false
}

static constraints = {
    def regEx = new RegEx()

    tripName blank: false, nullable: false, matches: regEx.address //Allows alphanumeric and some special characters
    startDate blank: true, nullable: true, validator: { 
        val, obj -> if (!val) ['startDateEmpty']
    }
    endDate blank: true, nullable: true, validator: { 
        val, obj -> if (!val) ['endDateEmpty']
        if (val<obj.startDate) return ['invalidDates']
    } 
}

第二

class TravelDestination {

static belongsTo = [travel: Travel]

Integer id

// Travel Information
Country country
String city
Date startDate
Date endDate

static mapping = {
    table 'destination'
    id generator: 'identity'
    version false
}

static constraints = {
    def regEx = new RegEx()

    country blank: false, nullable: false 
    city blank: false, nullable: false, matches: regEx.name 
    startDate blank: true, nullable: true, validator: { 
        val, obj -> if (!val) ['startDateEmpty']
    }
    endDate blank: true, nullable: true, validator: { 
        val, obj -> if (!val) ['endDateEmpty']
        if (val<obj.startDate) return ['invalidDates']
    }
}

0 个答案:

没有答案