【问题标题】:slick: what type do I need get back to iterate though a list in a viewslick:我需要什么类型来遍历视图中的列表
【发布时间】:2017-10-08 03:05:55
【问题描述】:

下面的代码可以显示用户最近的帖子,但现在我想获取用户创建的所有帖子。我怎么能实现呢?

让我困惑的是我应该返回的类型。是 Future[Option[Seq[Blog]]] 还是 Future[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))
      }
    }
  }

【问题讨论】:

    标签: scala playframework slick


    【解决方案1】:

    只需省略 .headOption,您将获得 Future[Seq[Blog]] 。 请注意,如果没有找到它可以为空,因此您不需要选项。

    【讨论】:

    • 感谢您的回复,代码在没有您所说的选项的情况下运行良好,但现在我想知道首先使用 .headOption 从整个列表。我的意思是,Future[Seq[DbBlog]] 作为结果类型应该足够好,而不是 Future[Option[Blog]]。如果是这种情况,您只需要使用.head 而不是.headOption。这只是一个约定吗? (我自己编写了代码,但基于一些教程。)
    • 好 :) 如果您使用 .head 获取第一个元素并且没有这样的元素,如果会抛出未找到的异常 - 您可以在 .recover 块中捕获该异常。在许多情况下,你很确定它存在,这完全没问题。但如果你不确定,那么 .headOption 是更好的风格。
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多