简单操作后播放框架db动作

时间:2015-02-10 18:21:03

标签: scala playframework

所以,基本上我想用play框架做的是:

  1. 检查用户是否已登录cookie
  2. 如果用户已登录cookie,则从数据库中获取记录
  3. 代码:

    def allSamplesJson = Action { implicit request =>
      request.session.get("l").map { value =>
        value match {
          case "i" => DBAction { conn =>
            implicit val dbs = conn.dbSession
            val all = models.CodeSampleTable.allSamples()
            Ok(Json.toJson(all))
          }
          case _ => Unauthorized(unautStr)
        }
      }.getOrElse {
        Unauthorized(unautStr)
      }
    }
    

    基本上,如果用户无权获取json记录,我甚至不想触摸数据库/打开连接等。上面的代码不起作用(不编译)。我该如何做到这一点?

    这是错误: Compile error

1 个答案:

答案 0 :(得分:1)

你不能将DBAction包裹在另一个Action中,因为DBAction没有返回Result,它可能返回Action[A]之类的内容}。这意味着您尝试在较高级ActionResultAction[A])内返回混合类型,因此编译器会将返回类型推断为Object,它应该是Result

正如@Mikesname建议的那样,您需要将DBAction替换为DB.withSession,这将提供您需要的数据库会话,并允许您返回正确的类型:

DB.withSession { conn =>
    val all = models.CodeSampleTable.allSamples()
    Ok(Json.toJson(all))
}