scala验证不应保存在数据库中的模型额外参数
我有以下型号:scala验证不应保存在数据库中的模型额外参数,scala,playframework,slick,playframework-2.5,Scala,Playframework,Slick,Playframework 2.5,我有以下型号: case class ProcessStepTemplatesModel( id: Option[Int], title: String, createdat: String, u
case class ProcessStepTemplatesModel(
id: Option[Int],
title: String,
createdat: String,
updatedat: String,
deadline: Option[Date],
comment: Option[String],
stepType: Int,
deleted: Boolean,
processtemplate: Option[Int])
object ProcessStepTemplatesModel {
implicit val processStepFormat = Json.format[ProcessStepTemplatesModel]
}
我有一个额外的值派生的
。所有数据都通过POST作为JSON发送到我的控制器。当我使用上面的模型验证请求时,该值将丢失
我需要这个值来处理模型,但它不应该被持久化
但是如果我向模型中添加值,我会从Scala slick中得到一个错误
更新:
在我的脑海中,有两个选项供您选择: 1。将前端表示与实际模型分离 您可以有一个
ProcessStepTemplatesClientModel
,它有一个额外的字段派生的
,仅用于验证控制器中的JSON输入。完成涉及派生的
字段的业务逻辑后,将对象转换为过程步骤模板模型
,并将其保存在数据库中
2。在你的光滑桌子的*投影中处理字段
将派生字段包括在ProcessStepTemplatesModel
类中(假设它是布尔型的,可与任何其他基元一起使用):
而且,由于您使用的是Slick作为数据库映射器,因此您的ProcessStepTemplatesModel
可能有一个表表示:
class ProcessStepTemplatesModelTable(tag: Tag) extends Table[ProcessTableTemplatesModel](tag, "PROCESS_TABLE_TEMPLATES_MODEL") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
...
def processtemplate = column[Option[Int]]("PROCESSTEMPLATE")
def * = (id, ..., processtemplate) <> ( {
tuple: (Int, ..., Option[Int]) => ProcessStepTemplatesModel(tuple._1, ..., tuple._9, derived = false)
}, {
ps: ProcessStepTemplatesModel => Some((ps.id, ..., ps.processtemplate))
})
}
是的,我在用滑头。*-投影看起来像这样<代码>定义*:ProvenShape[ProcessStepTemplatesModel]=(id.?,标题,createdat,updatedat,截止日期,注释,stepType,deleted,processtemplate)((ProcessStepTemplatesModel.apply 41;).tuple,ProcessStepTemplatesModel.unapply)如何添加静态值?@Felix see Edti将投影中的类型从表更改为模型,哪一个可能导致了错误?您可以分享完整的模型和表代码,以及您的insert语句吗?让我们来看看。
class ProcessStepTemplatesModelTable(tag: Tag) extends Table[ProcessTableTemplatesModel](tag, "PROCESS_TABLE_TEMPLATES_MODEL") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
...
def processtemplate = column[Option[Int]]("PROCESSTEMPLATE")
def * = (id, ..., processtemplate) <> ( {
tuple: (Int, ..., Option[Int]) => ProcessStepTemplatesModel(tuple._1, ..., tuple._9, derived = false)
}, {
ps: ProcessStepTemplatesModel => Some((ps.id, ..., ps.processtemplate))
})
}
def * : ProvenShape[ProcessStepTemplatesModel] = (id.?, title, createdat, updatedat, deadline, comment, stepType, deleted, processtemplate) <> ( {
tuple: (Option[Int], String, String, String, Option[Data], Option[String], Int, Boolean, Option[Int]) => ProcessStepTemplatesModel(tuple._1, tuple._2, tuple._3, tuple._4, tuple._5, tuple._6, tuple._7, tuple._8, tuple._9, derived = false)
}, {
ps: ProcessStepTemplatesModel => Some((ps.id, ps.title, ps.createdat, ps.updatedat, ps.deadline, ps.comment, ps.stepType, ps.deleted, ps.processtemplate))
})