我想将Option值映射到表单但不会被忽略。 例如:
case class Message(Id: Option[Int], name: String, description: Option[String])
val messageForm: Form[Message] = Form(
mapping(
"id" -> ignored(Option(0)),
"name" -> nonEmptyText(minLength = 4, maxLength = 140),
"description" -> text
)(Message.apply)(Message.unapply))
^
type mismatch;
found : (Option[Int], String, Option[String]) => Message
required: (Option[Int], String, String) => ?
忽略“id”值使用成功,但“text”会因应用函数而产生错误。 怎么做得比?我需要为Option [String]编写自定义表单约束吗?
答案 0 :(得分:8)
您可以使用Mapping[String]
方法将Mapping[Optional[String]]
转换为optional
,如下所示:
val messageForm: Form[Message] = Form(
mapping(
"id" -> ignored[Option[Int]](None),
"name" -> nonEmptyText(minLength = 4, maxLength = 140),
"description" -> optional(text)
)(Message.apply)(Message.unapply))
请注意,您可以使用None
表示id
字段中没有值。