2011-06-19 13 views
1

私はlift/mongodbと1対1の関係の簡単な例を探しています。 私はこの1つのようなシンプルなMongoRecordを作成することができるよ:lift/mongodbと1対1の関係を作成する方法

class Blob extends MongoRecord[Blob] with MongoId[Blob] { 
    def meta = Blob 

    object name extends StringField[Blob](this,10) 

} 
object Blob extends Blob with MongoMetaRecord[Blob]{ 

} 

を今、私はそれを行うことができるか、BLOBに親/子関係を追加したいですか?

EDIT:

私はfinaly(このguideは私をたくさん助けて)私の問題を解決する方法を見つけました。

MongoRecord:

package code.model 

import net.liftweb.mongodb.record.{MongoMetaRecord, MongoRecord} 
import net.liftweb.record.field.StringField 
import net.liftweb.mongodb.record.field.{ObjectIdRefField, ObjectIdPk} 


class Blob extends MongoRecord[Blob] with ObjectIdPk[Blob]{ 

    def meta = Blob 

    object name extends StringField[Blob](this,10) 

    object child extends ObjectIdRefField(this,Blob) 

} 

object Blob extends Blob with MongoMetaRecord[Blob] 

これは私が作成し、レコードを読み取る方法です:

package code.lib 

import net.liftweb.http._ 
import code.model.Blob 
import net.liftweb.common.{Full} 

object REST { 
    lazy val blob: LiftRules.DispatchPF = { 
    case Req("api" :: "blob" :: Nil, suffix, GetRequest) => { 
    () => { 
     val blobs = Blob.findAll.map(blob => { 

      val child = Blob.find(blob.child.is) 
      val childName = if (child.isDefined) child.open_!.name else "?" 

      <blob> 
      <id>{blob.id.is}</id> 
      <name>{blob.name}</name> 
      <child_name>{childName}</child_name> 
      </blob> 
     }) 

     Full(XmlResponse(<blobs>{blobs}</blobs>)) 
     } 
    } 
    case Req("api" :: "blob" :: Nil, suffix, PostRequest) => { 
    () => { 
     val randID = (scala.math.random * 999).toInt 

     val child = Blob.createRecord 
     child.name("child_" + randID) 
     child.save 

     val blob = Blob.createRecord 
     blob.name("blob_" + randID) 
     blob.child(child.id.is) 
     blob.save 

     Full(XmlResponse(<result>{blob.id.is}</result>)) 
     } 
    } 
    } 
} 

I'amそれを行うための正しい方法だ場合は、まだわからないので、ここで は結果であり、 : コメントは大歓迎です!

答えて