【发布时间】:2015-09-09 21:14:59
【问题描述】:
我在我的项目中集成了剪影(securesocial 的一个分支)作为身份验证库,所以我正在关注它的示例项目,其中包含 slick play-silhouette-slick-seed
在写 these lines 时,我在 eclipse 中遇到很多错误。
def find(loginInfo: LoginInfo) = {
DB withSession { implicit session =>
Future.successful {
slickLoginInfos.filter(
x => x.providerID === loginInfo.providerID && x.providerKey === loginInfo.providerKey
).firstOption match {
case Some(info) =>
slickUserLoginInfos.filter(_.loginInfoId === info.id).firstOption match {
case Some(userLoginInfo) =>
slickUsers.filter(_.id === userLoginInfo.userID).firstOption match {
case Some(user) =>
Some(User(UUID.fromString(user.userID), loginInfo, user.firstName, user.lastName, user.fullName, user.email, user.avatarURL))
case None => None
}
case None => None
}
case None => None
}
}
}
}
[预计会出现错误,因为示例项目是使用旧版本的 play 和 slick 编写的]
我尝试迁移它们,因此我将 withSession 替换为 run 并将 firstOption 替换为 headOption ,因为我在 slick 官方文档中读到以前的那些在 slick 3.0 中已被弃用。以下是我的更改,但仍然无法正常工作
def find(loginInfo: LoginInfo) = {
DB run {
Future.successful {
slickLoginInfos.filter(
x => x.providerID === loginInfo.providerID && x.providerKey === loginInfo.providerKey
).result.headOption match {
case Some(info) =>
slickUserLoginInfos.filter(_.loginInfoId === info.id).result.headOption match {
case Some(userLoginInfo) =>
slickUsers.filter(_.id === userLoginInfo.userID).result.headOption match {
case Some(user) =>
Some(User(UUID.fromString(user.userID), loginInfo, user.firstName, user.lastName, user.fullName, user.email, user.avatarURL))
case None => None
}
case None => None
}
case None => None
}
}
}
}
我是新手和 scala,每天都在探索新事物。你能帮我解决这些错误吗?如果有人也可以向我解释未来值的使用,我们使用 Await (db.run(....)) 获得的正常值有什么好处,以及如何解析未来对象中的值,因为我在某些地方看到他们使用地图和他们使用 onSuccess 或案例的一些地方,这非常令人困惑。处理未来价值观的最佳方式是什么?
【问题讨论】:
标签: scala playframework slick securesocial