0

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 が暗黙のセッションを見つけられなかったような気がします。それは探し続けます...これにより、この永遠に保留中の応答が発生します。

うーん、調べてもどうしたらいいのかわからない。ここで何が問題なのか、どうすれば修正できるのか誰か知っていますか?

4

1 に答える 1

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"))
}

私は同様の問題を抱えていましたが、それが私がそれを解決した方法です。ただし、セッションを取得するためのより良い方法が必要です。他の誰かがより良い提案を持っているなら、私も知りたいです。

于 2014-09-02T22:17:18.387 に答える