2017-06-19 26 views
0

我有以下型號:階驗證不應該被保存在數據庫中

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

我有一個額外的價值derived。所有數據都通過POST作爲JSON發送到我的控制器。當我使用上面的模型驗證請求時,此值將丟失。

我需要這個值來處理模型,但它不應該被持久化。

但是,如果我將值添加到模型,我會從Scala浮油中得到一個錯誤。

更新: enter image description here

回答

1

從我的頭頂,兩個選項爲您提供:

1.從您的實際模型解耦前端表示

你可以有一個ProcessStepTemplatesClientModel,它具有額外的字段derived,僅用於驗證控制器中的JSON輸入。完成涉及derived字段的業務邏輯後,將該對象轉換爲ProcessStepTemplatesModel並將其保存在數據庫中。

2.處理您油滑表你* -projection領域

包括在你ProcessStepTemplatesModel類派生場(假設它是布爾值,與任何其他原始作品):

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], 
             derived: Boolean) 

而且因爲你爲你的數據庫映射器使用油滑的,你可能有你的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)) 
     }) 
} 

不要在表定義中包含派生字段,並在* -projection中處理該案例,方法是將靜態值傳遞給案例類構造函數,以從元組創建對象,並在創建元組目的。

編輯

至於您的評論的迴應,更具體的實施* -projection的基礎上,ProcessStepTemplatesModel包括derived

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

是我使用的是光滑。 *投影看起來像這樣。 'def *:ProvenShape [ProcessStepTemplatesModel] =(id。?,title,createdat,updatedat,deadline,comment,stepType,deleted,processtemplate)<>((ProcessStepTemplatesModel.apply _)。tupled,ProcessStepTemplatesModel.unapply) How我會添加靜態值嗎? – Felix

+1

@Felix請參閱編輯 – thwiegan

+0

謝謝,我認爲關閉但仍然留下一個錯誤屏幕上方 – Felix

相關問題