自从 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[长]
我将表单更改为:
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”->忽略(NotAssigned:Pk[Long])
但是,我收到此错误。
类型不匹配;找到:(Option[Long], String, String, scala.math.BigDecimal, Option[java.util.Date], List[models.Img], List[models.Tag]) => models.Item required: (Long , 字符串, 字符串, 选项[java.util.Date], 列表[models.Img], 列表[models.Tag]) => ?
)(Item.apply)(Item.unapply)
为什么 Item 模型不需要 Option[Long]
?
我不知道 23L
是什么,但这就是 Play 文档中的内容。数据库中id的值来自一个序列。
如果我将其更改为:
"id" -> ignored(NotAssigned:Option[Long]),
这对我来说最有意义......我收到此错误:
类型不匹配;找到:anorm.NotAssigned.type 必需:Option[Long]
“id” ->忽略(NotAssigned:Option [Long]),
这比以前更没有意义了。
最佳答案
澄清一下,被弃用的不是 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)
关于scala - 将 Pk[Long] 转换为表单中的 Option[Long],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538068/