scala playframework如何为模型分配新值

scala playframework如何为模型分配新值,scala,playframework,slick,Scala,Playframework,Slick,我在scala playframework项目中有一个小的复杂模型。我必须做一些数据库请求,然后我必须给一个模型分配新的值 整个方法如下所示: def getEditProcessTemplateData(processTemplateId: Int): Action[AnyContent] = Action.async { //Get all steps of this process templates val stepIds: Future[Seq[Int]] = proc

我在scala playframework项目中有一个小的复杂模型。我必须做一些数据库请求,然后我必须给一个模型分配新的值

整个方法如下所示:

def getEditProcessTemplateData(processTemplateId: Int): Action[AnyContent] = Action.async {
    //Get all steps of this process templates
    val stepIds: Future[Seq[Int]] = processTemplateDTO.getProcessStepTemplateIds(processTemplateId)

    val process = for {
      allApprovedProcessTemplates <- processTemplateDTO.getApprovedProcessTemplates //Get all approved process templates
      processTemplate <- processTemplateDTO.getProcessTemplate(processTemplateId) // Get the Process Template
      prerequisites <- getProcessTemplateForEdit(processPrerequisitesDTO.getProcessPrerequisiteProcessTemplateIdsByProcessTemplateId(processTemplateId))
      postConditions <- getProcessTemplateForEdit(processPostConditionsDTO.getProcessPostConditionProcessTemplateIdsByProcessTemplateId(processTemplateId))
      approvedProcessTemplate <- processTemplateDTO.getProcessTemplate(processTemplate.get.approveprocess)
      trainedProcessTemplate <- processTemplateDTO.getProcessTemplate(processTemplate.get.trainingsprocess)
      processSteps <- processTemplateDTO.getProcessStepTemplates(processTemplateId)
      // Step prerequisites
      processStepsPrerequisites <- getProcessStepsPrerequisites(stepIds)
      processStepsPrerequisiteProcessTemplate <- getProcessStepsPrerequisiteProcessTemplate(stepIds)
      processTemplatesForStepPrerequisites <- getProcessTemplateForStepPrerequisite(stepIds)
      // Step post conditions
      processStepsPostConditions <- getProcessStepsPostConditions(stepIds)
      processStepPostConditionProcessTemplate <- getProcessStepPostConditionProcessTemplate(stepIds)
      processTemplatesForStepPostConditions <- getProcessTemplateForStepPostCondition(stepIds)
      // Derived processes
      derivedProcesses <- getDerivedProcesses(stepIds)
      processTemplatesForStepDerivedProcesses <- getProcessStepsDerivedProcesses(stepIds)
      // Process to process step
      processStepsTemplates_ProcessTemplates <- getProcessStepsTemplates_ProcessTemplates(stepIds)
      processTemplatesForProcessTemplatesToProcessStep <- getProcessTemplateToProcessStepId(stepIds)
      responsible <- raciProcessTemplateDTO.getResponsibleProcessTemplates(processTemplateId) // get all responsibles for this process template
      accountable <- raciProcessTemplateDTO.getAccountableProcessTemplates(processTemplateId) // get all accountables for this process template
      consulted <- raciProcessTemplateDTO.getConsultedProcessTemplates(processTemplateId) // get all consulted for this process template
      informed <- raciProcessTemplateDTO.getInformedProcessTemplates(processTemplateId) // get all consulted for this process template
    } yield (allApprovedProcessTemplates, processTemplate, prerequisites, postConditions, processSteps, processStepsPrerequisites,
      processStepsPrerequisiteProcessTemplate, processTemplatesForStepPrerequisites, processStepsPostConditions, processStepPostConditionProcessTemplate, processTemplatesForStepPostConditions, derivedProcesses,
      processTemplatesForStepDerivedProcesses, processStepsTemplates_ProcessTemplates, processTemplatesForProcessTemplatesToProcessStep, approvedProcessTemplate, trainedProcessTemplate, responsible, accountable, consulted, informed)

    process.map({ case (allApprovedProcessTemplates, processTemplate, prerequisites, postConditions, processSteps, processStepsPrerequisites,
    processStepsPrerequisiteProcessTemplate, processTemplatesForStepPrerequisites, processStepsPostConditions, processStepPostConditionProcessTemplate, processTemplatesForStepPostConditions, derivedProcesses,
    processTemplatesForStepDerivedProcesses, processStepsTemplates_ProcessTemplates, processTemplatesForProcessTemplatesToProcessStep, approvedProcessTemplate, trainedProcessTemplate, responsible, accountable, consulted, informed) =>

      processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] =>
        Future.sequence(psteps.map {
          step => {
            val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get)
            prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs)))
          }
        })
      }

      Ok(Json.obj(
        "allApprovedProcessTemplates" -> allApprovedProcessTemplates,
        "processTemplate" -> processTemplate,
        "prerequisites" -> prerequisites,
        "postConditions" -> postConditions,
        "approvedProcessTemplate" -> approvedProcessTemplate,
        "trainedProcessTemplate" -> trainedProcessTemplate,
        //       Step prerequisites
        "processStepsPrerequisites" -> processStepsPrerequisites,
        "processStepsPrerequisiteProcessTemplate" -> processStepsPrerequisiteProcessTemplate,
        "processTemplatesForStepPrerequisites" -> processTemplatesForStepPrerequisites,
        // Step post conditions
        "processStepsPostConditions" -> processStepsPostConditions,
        "processStepPostConditionProcessTemplate" -> processStepPostConditionProcessTemplate,
        "processTemplatesForStepPostConditions" -> processTemplatesForStepPostConditions,
        // Derived processes
        "derivedProcesses" -> derivedProcesses,
        "processTemplatesForStepDerivedProcesses" -> processTemplatesForStepDerivedProcesses,
        // Process to process step
        "processStepsTemplates_ProcessTemplates" -> processStepsTemplates_ProcessTemplates,
        "processTemplatesForProcessTemplatesToProcessStep" -> processTemplatesForProcessTemplatesToProcessStep,
        "steps" -> processSteps,
        "responsible" -> responsible,
        "accountable" -> accountable,
        "consulted" -> consulted,
        "informed" -> informed
      ))
    })
  }
我得到了这个错误:

found   : Seq[models.ProcessStepTemplatesModel] => scala.concurrent.Future[Seq[models.ProcessStepTemplatesModel]]

required: models.ProcessStepTemplatesModel => ?
[error]       processSteps.map{ psteps: Seq[ProcessStepTemplatesModel] =>
我怎样才能解决这个问题


谢谢

我认为您已经准备好了所需的代码,只需稍作修改:

Future.sequence {
    processSteps.map { step =>
        val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get)
        prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs)))
    }
}

你是说processSteps是未来的[Seq[ProcessStepTemplatesModel]]吗?它似乎只是一个Seq[ProcessStepTemplatesModel]或Future[ProcessStepTemplatesModel]。你是指我的评论吗?这可能是错误的,你是对的,这基本上就是错误信息所说的;你知道如何解决这个问题吗?这取决于什么是真正的processSteps类型。你能检查一下吗?看起来不错,但实际上不起作用。。。我用Ok归还所有的东西。。回到前端。但是当我尝试在添加后立即打印它们时,步骤中的先决条件是空的:processSteps.map{step=>{printlnß223;ßßßß,step.substancess}itsempty@Felix难道step.Premissions不是只有在prerequisiteFuture完成时才填充的吗?您应该一步一步地打印LN。copySpreditions=Someprereqs。而且当我在副本之后打印它时也是如此。我有一张空名单。因此,分配不起作用。它在内部工作:step.prereques=Someprereqs
Future.sequence {
    processSteps.map { step =>
        val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteIdsByProcessTemplateIdSeq(step.id.get)
        prerequisiteFuture.map(prereqs => step.copy(prerequisites = Some(prereqs)))
    }
}