Playを学んでいます!To do List のチュートリアルに従っています。さて、Anorm の代わりに Squeryl を使用したいので、チュートリアルを翻訳してみましたが、実際に動作します。
それでも、私を苛立たせる小さなことが 1 つあります。これが私のモデルの関連部分です
def all: Iterable[Task] = from(tasks) {s => select(s)}
すべてのタスクを一覧表示するコントローラーの対応するアクション
def tasks = Action {
inTransaction {
Ok(views.html.index(Task.all, taskForm))
}
}
ビューには、たとえば
<h1>@tasks.size task(s)</h1>
私が気に入らないのは、タスクを更新または削除するメソッドとは異なり、コントローラー アクション内でトランザクションを管理する必要があることです。
メソッドに移動inTransaction
するとall
、例外が発生します。
[RuntimeException: No session is bound to current thread, a session must be created via Session.create and bound to the thread via 'work' or 'bindToCurrentThread' Usually this error occurs when a statement is executed outside of a transaction/inTrasaction block]
ビューは のサイズを取得しようとしますtasks
が、トランザクションはその時点で既に閉じられているためです。
モデルでのみ Squeryl トランザクションを使用し、これらの詳細をコントローラー レベルまで公開しない方法はありますか?