我正在尝试创建一个新的Project实例(下面给出了代码),但是约束不允许我这样做,因为项目不是看到名字而是生成id。例如,代替'目标'(名称),它获得'3'('目标'名称的ID)。我的同事告诉我创建一个服务,它将根据id返回属性的实际名称,并从ProjectController调用该服务。我对groovy和grails语法不太熟悉,所以我不知道该怎么做。
我有一个带有name属性的Stage域类。在我的Bootstrap中,我为舞台加载了不同的名称。
if (Stage.count() == 0) {
new Stage(name: "").save()
new Stage(name: "Not Started").save()
new Stage(name: "On target").save()
new Stage(name: "Off target").save()
new Stage(name: "Late").save()
new Stage(name: "Critically Late").save()
new Stage(name: "Complete").save()
}
我还有一个具有Stage属性的Project类,我对这些阶段应用了一些约束:
class Project {
String name
Date dueDate
Date startDate
Stage requirements
Stage design
Stage development
Stage qa
Stage ua
Stage delivery
Date deliveryDue
static constraints = {
name blank: false, unique: true
dueDate min: new Date() - 1, max: new Date() + 365 * 10
startDate min: new Date() - 1, max: new Date() + 365 * 10
requirements inList: ["Not started", "Critically Late", "Off Target Date", "On target"]
design inList: ["Not started", "Critically Late", "Off Target Date", "On target"]
development inList: ["Not started", "Critically Late", "Off Target Date", "On target"]
qa inList: ["Not started", "Critically Late", "Off Target Date", "On target"]
ua inList: ["Not started", "Critically Late", "Off Target Date", "On target"]
delivery inList: ["Not started", "Critically Late", "Off Target Date", "On target"]
}
}
答案 0 :(得分:0)
向您的域类添加toString()
方法:
String toString() {
name
}
答案 1 :(得分:0)
所以你真的试图限制阶段可以拥有的价值。您正在尝试使用inList和字符串,但是该对象不是String,而是Stage。
所以在Stage域上,我会创建一个类似的方法:
static List<Stage> projectStages() {
Stage.findAllByNameInList(["Not started", "Critically Late", "Off Target Date", "On target"])
}
然后在你的验证中:
requirements inList: Stage.projectStages()
我认为我从未试图从默认验证器调用静态方法,所以如果这不起作用:
requirements validator { val, obj -> Stage.projectStages().contains(val) }