0

パターンマッチャーに追加の値を渡す方法があるかどうか知りたいです。Play Framework 2.1-RC1 と mysql を使用しています。

現在、Web アプリでユーザーの投稿を表すPostというクラスがあります。ユーザーがサイトにアクセスすると、次のメソッドを使用して 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 *)
    }
  }
}

ここで、現在のユーザーが (セッションに基づいて) 投稿にスタ​​ーを付けたかどうかを示す別のフィールドを Post クラス追加したいと思います。これには追加の 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() メソッドに渡すことはできますが、パターン マッチャー内からそれを参照するにはどうすればよいでしょうか? または、これにアプローチする別の方法はありますか?

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 に答える