经过一周的搜索和尝试,我不得不带着我的问题来到这里。
我有一个需要使用 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')打印到脚手架保管箱。
有谁知道用脚手架做这件事的更好方法?