【发布时间】:2014-08-25 10:34:34
【问题描述】:
我有一个表单映射,如下所示:
val myBaseMapping = mapping(
"email" -> email,
"password" -> text.verifying("Please provide a password", !_.isEmpty)
)(BaseModel.apply)(BaseModel.unapply)
这代表FormA。我有另一种形式,FormB,它是相同的,但增加了几个字段。这是它的映射的样子:
val myExtendedMapping = mapping(
"email" -> email,
"password" -> text.verifying("Please provide a password", !_.isEmpty)
"name" -> text,
"website" -> text
)(ChildModel.apply)(ChildModel.unapply)
ChildModel 扩展 BaseModel:它添加了 2 个新字段,name 和 website。
我正在尝试以不必复制共享字段(电子邮件和密码)的绑定定义的方式对myExtendedMapping 进行编码。
我不确定这里的 Scala 语法是什么。我不知道如何“扩展”给定的映射并向其添加绑定。另外,由于行为的不同,我不希望添加临时验证。这是可能的还是我只需要复制代码?
【问题讨论】:
-
每个绑定到什么?
-
我不确定这是否能回答您的问题,但要使用映射,我会这样做:Form(myMapping),然后使用它从 HTTP 请求中绑定。
-
我的意思是,
FormB也应该绑定到MyModel,还是其他什么?如果是这样,那会是什么样子? -
哦,我明白了:我目前的计划是创建另一个单独的模型类,例如 MyChildModel 扩展 MyModel 以用于表单 B 的映射(添加那些额外的属性)。所以换句话说,我一直在寻找一种让表单绑定与模型对象结构平行的方法。但我绝对愿意接受更好的方式来组织这一切。