2013-05-31 26 views
0

我想創建一個新的Project實例(代碼在下面給出),但是這些約束不允許我這樣做,因爲不是看到名字,項目生成ID的。例如,而不是'目標'(名稱)它會得到'3'('目標'名稱的ID)。我的同事告訴我創建一個服務,它將返回基於id的屬性的實際名稱,並從ProjectController調用該服務。我不熟悉Groovy和Grails的語法,所以我不知道該怎麼做。提取對象的實際值,知道它的ID在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() 
    } 

我也有一個具有舞臺屬性的工程類,我應用了一些約束,這些階段:

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

所以你真的試圖限制階段可以有的價值。你試圖用inList和字符串來實現它,但是這個對象不是一個String,它是一個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) } 
0

添加toString()方法,您的域類:

String toString() { 
    name 
} 
+0

添加toString()並不能解決問題。 –

相關問題