はじめて投稿させて頂きます。
今まで、Java版を利用させて頂いており、Scala版を利用したいと思い、
GW中に勉強させて頂いております。
現状利用しているframeworkとバージョンは下記の通りです。
Play 2.5.3 Scala
Slick 3.1.0
以前、作ったJava版で作ったプログラムを、Scala版に置き換えをして、
勉強しているのですが、validation内でのデータベースへの問合せ方法が理解できておらず、
下記のようなコードを記述させて頂きました。
class BookController @Inject()(book: bookDao)(implicit context: ExecutionContext) extends Controller {
def validate(name: String, category: String) = {
logger.debug(bookDataId)
val f = book.isPrice(name, category)
f.isCompleted match {
case true =>
Some(BookData(name, category))
case _ =>
Some(null)
}
}
val userForm = Form(
mapping(
"name" -> text,
"category" -> text
)(BookData.apply)(BookData.unapply) verifying("エラー", fields => fields match {
case bookData => validate(bookData.name, bookData.category).isDefined
})
)
}
class BookDao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)
extends HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
val booktable = TableQuery[BookTable]
def all(): Future[Seq[Book]] = db.run(booktable.result)
def isPrice(name: String, category: String): Future[Option[BookTable]] =
db.run(
booktable.filter(
n =>
(n.name === name) && (n.category === category)
).result.headOption)
}
上記を実行すると、データベースへは接続し値を取得できるのですが、
f.isCompletedの結果が必ずfalseになります。
非同期で実行されているようで、どうしたら、正常な処理となるのか、
わかりませんでした。
私の記述に問題があると思うのですが、どのように修正すればよいかわからないため、
こちらに投稿させて頂きました。
初歩的なことかもしれませんが、アドバイス頂けると幸いです。
大変、お手数をおかけしますが、よろしくお願い致します。