Я пытаюсь сделать несколько зависимых вызовов Slick/DB, а затем отобразить полученные данные в шаблоне twirl.
def show(slug: String) = Action.async { implicit rs =>
for {
f <- fooDAO.findBySlug(slug) // f is of type Option[foo]
fid <- f.flatMap(a => a.id.map(b => b)) // fid is of type Long
b <- barDAO.findByFooId(fid) // b is of type Seq[bar]
} yield {
f.map {
case Some(f) => Ok(views.html.foobar(f, b))
case _ => NotFound
}
}
}
Сначала мне нужно получить «ID», чтобы затем иметь возможность запрашивать другие соответствующие данные. Теперь компилятор выдает эту ошибку:
play.sbt.PlayExceptions$CompilationException: Compilation error[type mismatch;
found : scala.concurrent.Future[Option[play.api.mvc.Result]]
required: Option[?]]
Любая помощь будет принята с благодарностью.
f.flatMap(a => a.id.map(b => b))
вместоf.flatMap(_.id)
; 2. почему в комментариях используются имена переменных, отличные от ссылочного кода; 3. что вы ожидаете от последнего сопоставления прецедентов в блокеyield
: знаете ли вы, что альтернативаNotFound
никогда не достигается?case f =>
будет соответствовать каждому значению и свяжет его с переменной с именемf
. - person pagoda_5b   schedule 03.06.2015