我想知道是否有办法将其他值传递给模式匹配器。我正在使用Play Framework 2.1-RC1和mysql。
目前我有一个名为发布的课程,用于在我们的网络应用中表示用户帖子。用户访问该站点,该站点使用以下方法从DB中提取在浏览器中精美呈现的帖子。一切正常。
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 *)
}
}
}
现在,我想要做的是在帖子类中添加另一个字段,表示当前用户(基于会话)是否已已加星标一个帖子与否。这需要额外的DB调用,理想情况下我想做类似以下的事情:
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()方法,但是如何从模式匹配器中引用它?还是有另一种方法来解决这个问题吗?
答案 0 :(得分: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
返回更新字段的新对象。