我正在玩一些简单的游戏测试。我首先在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无法找到隐式会话,并且它一直在寻找...这导致了这个永远未决的响应。
好吧,我搜索了它,但仍然不知道该怎么做。有谁知道这里有什么问题,我该如何解决?
答案 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"))
}
我有类似的问题,这就是我如何解决它。必须有一个更好的方式来获得会话。如果其他人有更好的建议,我也想知道。