scala - 将 Pk[Long] 转换为表单中的 Option[Long]

标签 scala playframework playframework-2.3 anorm

自从 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/

相关文章:

java - 如何在play Framework 2.3.x中访问子项目中的父项目类

multithreading - 在 Scala 中包装不可变集合并维护线程安全?

scala - 如何创建一个以spark.broadcast[Map]作为参数的方法?

scala - 如何将隐式 Action val 覆盖到 Play 框架 2 中

scala - 迁移到2.6 : lang is not being implicitly propagated out of the request

ssh - Play框架2.3.x,无需控制台即可运行

sbt - 如何避免激活器在访问“播放”页面时两次执行编译任务?

json - Circe:高效解码多级ADT

java - 使用 FastParse 解析缩进

java - 如何在 Java Play 中删除 HTTP 请求!筛选?