0

新しい Project インスタンスを作成しようとしています (コードは以下に示されています) が、プロジェクトは名前を表示する代わりに ID を生成するため、制約により作成できません。たとえば、'On target'(name) の代わりに '3'('On target' name の 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"]
}
}
4

2 に答える 2

0

したがって、実際には、ステージが持つことができる値を制限しようとしています. inList と文字列を使用して実行しようとしていますが、オブジェクトは文字列ではなく、ステージです。

したがって、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) }
于 2013-05-31T12:26:31.630 に答える