2014-09-10 4 views
0

При использовании CRUDify, как я могу убедиться, что когда запись сохранена, поле «владелец» записи автоматически устанавливается как зарегистрированный пользователь?При использовании CRUDify, как я могу убедиться, что когда запись сохранена, поле «владелец» записи автоматически устанавливается как зарегистрированный пользователь?

Учитывая приведенную ниже модель, я хотел бы, чтобы методы CRUDify устанавливали поле «владелец» равным id (первичному ключу) зарегистрированного пользователя. Я использую MegaProtoUser от Lift.

Что мне нужно было бы переопределить, и как бы я это сделал?

class Mytable extends LongKeyedMapper[Mytable] with IdPK { 

    def getSingleton = Myclass 

    object owner extends MappedLongForeignKey(this, User) 
    object description extends MappedString(this, 140) 
    object name extends MappedString(this, 140) 
    object status extends MappedInt(this) 
    object entry_number extends MappedInt(this) 
    object quantity extends MappedDecimal(this, MathContext.DECIMAL64, 2) 
} 

object Mytable extends Mytable with LongKeyedMetaMapper[Mytable] with CRUDify[Long, Mytable] { 

    override def editMenuLoc:Box[Menu] = Empty 
    override def deleteMenuLoc:Box[Menu] = Empty 
    override def viewMenuLoc:Box[Menu] = Empty 
    override def createMenuLocParams: List[Loc.AnyLocParam] = List(If(User.loggedIn_? _, "Not logged in")) 
    override def showAllMenuLocParams: List[Loc.AnyLocParam] = List(If(User.loggedIn_? _, "Not logged in")) 

    override def findForList(start: Long, cnt: Int): List[Mytable] = 
    findAll(StartAt(start), MaxRows(cnt), By(owner, User.currentUser)) 

    override def findForParam(in: String): Box[Mytable] = 
    for { 
     user <- User.currentUser 
     id <- Helpers.asLong(in) 
     mytable <- find(By(this.id, id), By(owner, user)) 
    } yield mytable 
} 

ответ

0

Мне удалось найти решение here. Мне просто нужно было переопределить значение по умолчанию для поля владельца следующим образом:

object owner extends MappedLongForeignKey(this, User) { 
    override def defaultValue = User.currentUser match {case Full(x) => x.id.get; case _ => 0} 
    }