2

经过一周的搜索和尝试,我不得不带着我的问题来到这里。

我有一个需要使用 grails脚手架建模的遗留系统。系统通过以下方式收集报告信息:

|customer_id|Question_1  |Question_2|...|Question_N|
|123        |A           |Z         |...|D         |
|456        |B           |X         |...|E         |

问题的答案集是:

Question 1: A,B,C
Question 2: Z,X,Y
Question N: D,E,F

在许多此类表中,N 远远超过100 。

我知道我可以通过以下方式对表格进行建模(不介意语法)

1.inList

class InformationTable {
    Int customerId
    String question1
    String question2
    .
    .
    String questionN

    static constraints = {
        question1 inList: ['A','B','C']
        question2 inList: ['Z','X','Y']
        .
        .
        questionN inList: ['D','E','F']
    }
}

或者通过使用自定义验证器限制可能的结果来部分使用脚手架。Scaffolding 在答案的选择框中显示所有选项,但只允许保存它们自己类型的答案:

2. 自定义验证器

class InformationTable {
    Int customerId
    Answer answer1
    Answer answer2
    .
    .
    answer answerN

    // again, don't mind about the syntax 
    // I wrote this out of memory and will 
    // check the syntax in the evening

    static constraints = {
        answer1 validator: { val, obj ->
            obj.answer1.type == 'question1'
        }
        answer2 validator: { val, obj ->  
            obj.answer2.type == 'question2'
        }   
        .
        .
        answerN validator: { val, obj ->  
            obj.answerN.type == 'questionN'
        }
    }
}

class Answer {
    String name
    String type
}

后一个例子中的问题表

|type     |name|
|question1|A   |
|question1|B   |
|question1|C   |
|question2|Z   |
|question2|X   |
|question2|Y   |
|question3|D   |
|question3|E   |
|question3|F   |

第一个选项(inList)是一种使用脚手架的方法,但它需要大量工作,我不喜欢这些答案选项不在数据库中。

第二种方法看起来很有希望,但我不如何限制脚手架打印的打印答案,例如 answer1 只会将有效选项('A','B','C')打印到脚手架保管箱。

有谁知道用脚手架做这件事的更好方法?

4

0 回答 0