【发布时间】:2015-05-02 08:01:25
【问题描述】:
编辑:对于那些想知道我打算如何根据接受的答案解决它的人,请参阅嵌套值here。
我正在使用带有 Scala 和 Reactive Mongo 的 Play Framework。
目前我正在创建这样的案例类和表单:
case class Person(
_id : Option[BSONObjectID],
name: string,
city: string)
object Person {
val form: Form[Person] = Form {
mapping(
"_id" -> optional(of[String] verifying pattern(
"""[a-fA-F0-9]{24}""".r,
"constraint.objectId",
"error.objectId")),
"name"-> text,
"city"-> text)
{ (id,name, city) => Person(id.map(new BSONObjectID(_)), name, city) }
{ person =>Some(person._id.map(_.stringify), person.name, person.city) }
}
}
如果我在 _id 属性中使用简单类型,例如 String,我可以做一些更简单的事情,例如:
object Person {
val form: Form[Person] = Form {
mapping(
"_id" -> text,
"name"-> text,
"city"-> text
)(Person.apply)(Person.unapply)
}
}
所以我想我可以创建自己的应用方法来更改第一个参数,使用柯里化。我会这样定义:
def apply2(id: Option[String]) = {
val bsonid = id.map(new BSONObjectID(_))
(Person.apply _).curried(bsonid)
}
我的理论是,哪个实现不起作用,我将部分应用 BSONObjectID 参数到 Person.apply 函数,该值将来自名为 id 的 apply2 参数。它不起作用。
我是一个懒惰的人,不想仅仅因为现在我有一个默认情况下不支持的新情况而输入一堆东西...... currying 是我的赌注之一,但任何解决方案可以更容易地创建表单是可以接受的。
我只需要一种方法来识别对象,这样我就可以在之后删除或更新它,但是目前的方法输入起来有点无聊,我认为 MongoDB 创建的 _id 字段是完美的。
有什么方法可以让事情变得更简单,或者我只需要停止懒惰吗?
【问题讨论】:
标签: mongodb scala playframework playframework-2.0 reactivemongo