このクエリを正しく取得しようとしていますが、エラーが発生しています。まず、searchUserは、userの一意のIDを含む一致するUserEntriesのシーケンスを返します。また、userIdのそれぞれに対して、別のテーブルから他のユーザー情報+アドレスを取得します。Scala:エラーを含む理解のために内部でクエリを構成する
コード:使用するAPIについて
def searchUsers(pattern: String) = auth.SecuredAction.async {
implicit request =>
usersService.searchUser(pattern) flatMap { usrList =>
for {
u <- usrList
ui <- usersService.getUsersWithAddress(u.id)
} yield {
Ok(views.html.UserList(ui))
}
}
}
署名:
def searchUser(pattern: String): Future[Seq[UserEntry]] = ...
def getUsersWithAddress(userId: Long): Future[Seq[(UserProfile, Seq[String])]] = ...
がエラー:
[error] modules/www/app/controllers/Dashboard.scala:68: type mismatch;
[error] found : scala.concurrent.Future[play.api.mvc.Result]
[error] required: scala.collection.GenTraversableOnce[?]
[error] ui <- usersService.getUsersWithAddress(u.id)
[error] ^
[error] one error found
[error] (www/compile:compileIncremental) Compilation failed
私はライン "U < - usrList" をコメントアウトした場合やユーザーIDをハードコーディング"ui < - usersService.getUsersWithAddress(1L)"のような次の行では動作します。私の欠点は何ですか?
にgetUserWithAddressの署名を変更しなければならなかった私は、Uを折り返す場合< - Future.successfulとusrList()私が「で終わる値IDがメンバーではありませんSeq [models.UserEntry]の "私は "u"がシーケンスではなくアイテムになることを望んでいました。 2番目のジェネレータは1つのアイテムへの参照が必要です - どのようにすればいいですか(私は非機能的な言語で伝統的なforループを考えることができますが、ここではありません) – srvy
あなたの答えに基づいてチェーンをたどり、私はコメントに書式設定されたコードを置くことができないので、私はそれを私の答えとして追加します - しかし、あなたにクレジットを与えるためにあなたを受け入れます! – srvy