DBAction导致播放服务器无响应

时间:2014-01-02 00:05:41

标签: scala playframework play-slick

我正在玩一些简单的游戏测试。我首先在DB.withSession {implicit s:Session => ...}中使用Global.scala,但效果非常好。然后我尝试在我的控制器中使用DBAction{},事情开始分崩离析。

package controllers

import play.api.mvc._
import play.api.db.slick._
import play.api.Play.current
import models._

object Main extends Controller {

  def index = DBAction { implicit s =>

      Articles.insert(Article(None,"title1", "hellothere", Some(timeStamp), Some(timeStamp), None))

    Ok(views.html.index.render("OK, It works"))
  }
}

模型看起来像这样(我正在跳过DAO特征,案例类和蛋糕模式):

  object Articles extends DAO {

    /* Insert a new Article  */
    def insert(article: Article)(implicit s: Session) {
      Articles.insert(article)
    }

  }

我试图运行这个程序,我得到的只是永久服务器挂起状态。其他一切正常,我的Global.scala正确地创建了所有表,如果我删除了Articles.insert()子句,我会得到我的查看页面。所以我想说这部分一定有问题:DBAction { implicit s=> ...}。我不知何故觉得DBAction无法找到隐式会话,并且它一直在寻找...这导致了这个永远未决的响应。

好吧,我搜索了它,但仍然不知道该怎么做。有谁知道这里有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

DBAction将会话放在一个层中。所以在上面的代码中,“s”实际上是设置为请求。您可以调用s.dbSession并以此方式获取。

def index = DBAction { request =>
  implicit val session = request.dbSession
  Articles.insert(Article(None,"title1", "hellothere", Some(timeStamp), Some(timeStamp), None))

  Ok(views.html.index.render("OK, It works"))
}

我有类似的问题,这就是我如何解决它。必须有一个更好的方式来获得会话。如果其他人有更好的建议,我也想知道。

相关问题