【问题标题】:Converting Pk[Long] to Option[Long] in a Form在表单中将 Pk[Long] 转换为 Option[Long]
【发布时间】:2014-12-18 02:00:04
【问题描述】:

自从 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]),

这比以前更没有意义了。

【问题讨论】:

    标签: scala playframework playframework-2.3 anorm


    【解决方案1】:

    澄清一下,弃用的不是 Anorm,而是 Anorm 中的 Pk 类型。

    您的问题是您试图将NotAssigned 分配给不兼容的Option[Long]。您应该将所有NotAssigneds 更改为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)
    

    【讨论】:

    • 这行得通。最后,谢谢。我还有一个不应该存在的BigDecimal,但在此之前就存在问题。我只是想提一下,以防有人发现它。 :)
    • "id" -> Option.empty[Long] 将与下一个 Anorm 修订版更加兼容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2016-12-25
    • 2010-12-31
    • 2013-08-21
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多