Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala验证不应保存在数据库中的模型额外参数_Scala_Playframework_Slick_Playframework 2.5 - Fatal编程技术网

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))
      })