【问题标题】:Play! Framework - return multiple list to template玩!框架 - 将多个列表返回到模板
【发布时间】:2015-02-04 07:43:54
【问题描述】:

我有 3 个课程,我想将 3 个列表返回到在 Form 中使用的模板 我的数据库是 MongoDB

def addCourse = Action.async {implicit request =>
  val teacherCollection = db.collection[BSONCollection]("Teacher")
   val courseColl = subjectCollection.find(BSONDocument()).cursor[Subject].collect[List]()
   val teacherColl = teacherCollection.find(BSONDocument()).cursor[Teacher].collect[List]()

    courseColl.map { course =>
      val sam = teacherColl.map{teacher=>
        teacher
      }
    Ok(views.html.Course.addNewCourse(course,sam,Course.form))
   }
  }

模板代码:

   @(subject:List[models.Subject],teacher:List[models.Teacher],myForm: Form[models.Course])

我有一个错误:类型不匹配期望 List[Teacher] ,实际 Future[List[Teacher]]

我该怎么办?

注意:如果我将 Ok(views...) 放入 val sam 映射,编译器会显示错误,这听起来像是异步错误,因为“异步”将是红色的

 Error:(59, -1) Play 2 Compiler: 
 /app/controllers/School.scala:59: type mismatch;
found   : Unit
  required: play.api.mvc.Result

【问题讨论】:

  • 您要完成的工作并不明显。 val samFuture[List[Teacher]] 因为你的 map 函数是没有意义的。如果您将Ok 移动到该map 函数中,您可能会取得进展,但您会遇到其他编译器错误。此外,courseColl.map 会给您courses =>,但它似乎被命名为好像它是单个项目而不是列表。另外,我只是假设你的“colls”是期货——我不知道你使用的是什么数据库库,所以我不能自己复制代码。尝试更多地解释代码,人们可能会提供帮助。
  • 请检查帖子编辑
  • 我已经用 flatMap 解决了这个问题
  • 如果你已经修复了,你可以在下面发布答案并接受它:) 如果没有,我会考虑在这周做一个例子。

标签: mongodb scala playframework reactivemongo twirl


【解决方案1】:

我已经用 flatMap 解决了这个问题

courseColl.flatMap { course =>
  teacherColl.flatMap { teacher =>
    semesterColl.map { semester =>
      Ok(views.html.Course.addNewCourse(course, teacher, semester,    Course.form))
    }
  }
}

【讨论】:

    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2011-03-14
    • 1970-01-01
    • 2012-02-20
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多