在使用 Grails 时,我喜欢尽可能地依赖自动数据绑定和脚手架。我有以下问题。我有一个域类 Flow,它有一个域类 Node 的实例集合,是最新的一个抽象类:
class Flow {
List nodes
static hasMany = [ nodes: Node]
static constraints = { nodes minSize:1 }
}
abstract class Node {
String title
static belongsTo = [ ownerFlow: Flow]
}
有几个类继承自 Node.js。尝试使用数据绑定创建流时,以下集成测试失败:
void "a flow can be created from a single request using the default grails data binding"() {
when:
def controller = new FlowController()
controller.request.addParameters(['nodes[0].title': 'First step'])
new Flow(controller.params).save(flush:true)
then:
Flow.count() > 0
}
}
当我将 Node 从抽象更改为非抽象时,测试通过了。这是完全有道理的,因为 Grails 无法创建 node[0] 实例,因为 Node 是一个抽象类,但问题是:
- 有没有办法指定节点的具体类以便可以创建它?
从技术上讲是完全可能的(事实上,Grails 已经在使用类名列来持久化和检索实例),但我不确定在数据绑定中是否已经考虑过这种情况。如果不:
- 您认为不接触控制器的最佳解决方案是什么?