0

我想知道是否有办法将附加值传递给模式匹配器。我正在使用 Play Framework 2.1-RC1 和 mysql。

目前我有一个名为Post的类,用于在我们的 Web 应用程序中表示用户帖子。用户访问该站点,该站点使用以下方法从数据库中提取在浏览器中呈现精美的帖子。这一切都很好。

case class Post(id:Long, message:String)

object Post extends ObjectModel {
  val simple = {
    get[Long]("id") ~
    get[String]("message") map {
      case id~message=>
        Post(
          id,
          message
        )
    }
  }

  def fetch(): List[Post] = {
    DB.withConnection { implicit connection =>
      val ret = SQL( "SELECT id, message FROM post" ).as(Post.simple *)
    }
  }
}

现在,我想做的是向Post类添加另一个字段,该字段表示当前用户(基于会话)是否已为帖子加注标。这需要一个额外的数据库调用,理想情况下我想做如下的事情:

case class Post(id:Long, message:String, starred:Boolean)

object Post extends ObjectModel {
  val simple = {
    get[Long]("id") ~
    get[String]("message") map {
      case id~message=>
        Post(
          id,
          message,
          didStar(id, userId)
        )
    }
  }
...

所以我的问题是如何将userId值获取到模式匹配器。我不想通过数据库传递数据。我可以将userId传递给 fetch() 方法,但是如何从模式匹配器中引用它?还是有另一种方法来解决这个问题?

4

1 回答 1

1

我不知道有关您的架构的详细信息,但您可以设置默认值,并稍后更新:

case class Post(id:Long, message:String, starred:Boolean)

object Post extends ObjectModel {
  val simple = {
    get[Long]("id") ~
    get[String]("message") map {
      case id~message => Post(
        id, 
        message,
        starred = false // default value
      )
    }
  }
...
val post = // fetch post
val starred = // determine if post was starred
post.copy(starred = starred) // update value

post.copy返回字段更新的新对象。

于 2013-01-03T03:28:28.800 回答