自从Scala Anorm Pk被弃用以来,我一直无法理解这里的问题。
我将模型切换为以下内容:
case class Item(id: Option[Long] = NotAssigned,
title: String,
descr: String,
created: Option[Date],
private val imgs: List[Img],
private val tags: List[Tag])
来自id: Pk[Long]
我将表单更改为:
val itemForm = Form(
mapping(
"id" -> ignored(23L),
"title" -> nonEmptyText,
"descr" -> nonEmptyText,
"created" -> optional(ignored(new Date)),
"imgs" -> Forms.list(itemImgs),
"tags" -> Forms.list(itemTags)
)(Item.apply)(Item.unapply)
)
来自"id" -> ignored(NotAssigned:Pk[Long])
但是,我得到了这个错误。
type mismatch; found : (Option[Long], String, String, scala.math.BigDecimal, Option[java.util.Date], List[models.Img], List[models.Tag]) => models.Item required: (Long, String, String, Option[java.util.Date], List[models.Img], List[models.Tag]) => ?
)(Item.apply)(Item.unapply)
为什么Item模型不需要Option[Long]
?
我不知道23L
是什么,但这就是Play文档中的内容。数据库中id的值来自序列。
如果我将其更改为:
"id" -> ignored(NotAssigned:Option[Long]),
这对我来说最有意义......我收到了这个错误:
type mismatch; found : anorm.NotAssigned.type required: Option[Long]
"id" -> ignored(NotAssigned:Option[Long]),
这比以前更没意义。
答案 0 :(得分:2)
只是为了澄清,不是Anorm被弃用了,而是Anorm中的Pk
类型。
您的问题是,您尝试将NotAssigned
分配给Option[Long]
,这是不兼容的。您应该将所有NotAssigned
更改为None
。
所以你的课程看起来像这样:
case class Item(
id: Option[Long] = None,
title: String,
descr: String,
price: BigDecimal,
created: Option[Date],
private val imgs: List[Img],
private val tags: List[Tag]
)
Form
映射:
"id" -> ignored[Option[Long]](None)