2013-10-30 186 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

謝謝,但這並沒有解決我的問題。 –