2017-10-08 49 views
1

下面的代码可以显示用户最近发布的帖子,但是现在我想要获取用户创建的所有帖子。我怎么能实现这一点?slick:我需要什么类型才能返回遍历视图中的列表

令我困惑的是我应该找回的那种类型。它是未来[Option [Seq [Blog]]]或未来[Seq [Option [Blog]]还是有更好的解决方案?

def find(user: User): Future[Option[Blog]] = { 
    val blogQuery = blogs.filter(_.userID === user.userID.toString).sortBy(_.createdAt.desc) 

    db.run(blogQuery.result.headOption).map { dbBlogOption => 
     dbBlogOption.map { 
     dbBlog => Blog(None, dbBlog.title, dbBlog.content, UUID.fromString(dbBlog.userID), DateTime.parse(dbBlog.createdAt)) 
     } 
    } 
    } 

回答

1

就离开了.headOption,你会得到一个未来[序列[博客]。 请注意,如果没有找到它,它可以为空,因此您不需要选件。

+0

感谢您的回复,并且代码很好地工作,没有像您所说的Option,但现在我想知道在首先使用'.headOption'从一个整个列表中检索一个帖子有什么意义。我的意思是,Future [Seq [DbBlog]]应该足够好,而不是Future [Option [Blog]]。如果是这样的话,你只需要使用'.head'而不是'.headOption'。这只是一个约定吗? (我自己写了代码,但基于一些教程。) – hirofujitaaki

+1

好:)如果你这样做。头部以获得第一个元素,并且没有这样的元素,如果会抛出一个找不到的异常 - 你可以捕获一个.recover块。在很多情况下,你很确定它的存在是完全正确的。但如果你不确定,那么.headOption是更好的风格。 – Ossip

+0

哈哈,完全有道理。谢谢! – hirofujitaaki

相关问题