2013-10-30 119 views
0

这个网站已被多次询问,但我仍然无法弄清楚答案。我试图映射形式的情况下类,我有,这里的例子类:斯卡拉播放地图表格

case class MapVitalSign(id:Long,name:String, 
    lowerBoundComplicationId:Long, upperBoundComplicationId:Long, 
    lowerBound:Double,upperBound:Double) extends VitalSign( 
    id,name, 
    lowerBoundComplicationId,upperBoundComplicationId, 
    lowerBound,upperBound) 

这里这个代码我想它映射到。

val vitalSignForm: Form[MapVitalSign] = Form(
    mapping(
     "id" -> ignored(Long), 
     "name" -> text, 
     "lowerBoundComplicationId" -> number, 
     "upperBoundComplicationId" -> number, 
     "lowerBound" -> number, 
     "upperBound" -> number) 
     ((id,name,lowerBoundComplicationId, 
     upperBoundComplicationId,lowerBound, 
     upperBound) => MapVitalSign(id,name, 
     lowerBoundComplicationId.toLong, 
     upperBoundComplicationId.toLong,lowerBound.toDouble, 
     upperBound.toDouble), 
     (v:MapVitalSign) => Some(v.id,v.name,v.lowerBoundComplicationId.toInt,v.upperBoundComplicationid.toInt, lowerBound.toInt,upperBound.toInt) ) 
) 

哪里是我的发生映射错误,据我可以告诉一切似乎映射到正确的类型,arguements的金额是否正确。这是否与最初被忽略的“id”字段有关(因为我的posgres db没有生成一个)?

+0

使用'ignored'时,您需要提供一个实际值。例如,'ignored(0L)',或其他什么,因为它会在稍后被填充。 –

回答

1

如果您的形式和你的情况类具有相同的字段,你应该能够使用案例类应用和不应用方法:

import play.api.data.format.Formats._ 

val vitalSignForm: Form[MapVitalSign] = Form(
    mapping(
    "id" -> of[Long], 
    "name" -> text, 
    ... 
)(MapVitalSign.apply _)(MapVitalSign.unapply _) 
) 
+0

如何在表单中指定Long值而不仅仅是一个通用“数字”? –

+0

有'longNumber'映射。 – kompot

+0

用Long映射更新。 – OlivierBlanvillain

0

至于ignored方法状态的文档“我们在结合忽略此参数/ unbinding我们必须提供一个默认值“你应该为它提供默认值。所以用ignored(0L)代替ignored(Long)应该有所帮助。

+0

谢谢,但这并没有解决我的问题。 –