2012-06-19 16 views
5

Sto sviluppando la mia classe utente nella mia applicazione di sollevamento e ho sviluppato due moduli, uno per la registrazione utente e uno per l'accesso utente.Convalida ad hoc per campi Record in Lift

Ho la seguente classe di utente:

class MongoUser private() extends MongoRecord[MongoUser] 
    with MongoId[MongoUser] { 

    def meta = MongoUser 

    object firstname extends StringField(this, "") 
    object lastname extends StringField(this, "") 
    object password extends PasswordField(this, "") 
    object email extends EmailField(this, 90) 
    object business extends StringField(this, "") 

    /* 
    * validation method for checking email is unique 
    */ 
    protected def emailUnique(emailVal:String) = { 
     meta.findAll("email", emailVal) match { 
     case Nil => Nil 
     case _ => List(FieldError(email, "Email should be unique")) 
     } 
    } 
} 

e le seguenti due schermate:

object SignupWizard extends Wizard { 
    object user extends WizardVar(MongoUser.createRecord) 

    val person = new Screen { 

    addFields(() => user.is.firstname) 
    addFields(() => user.is.lastname) 
    addFields(() => user.is.password) 
    addFields(() => user.is.email) 


    override def nextScreen = { 
     //user.is.save 
     business 
    } 
    } 

    val business = new Screen { 
    addFields(() => user.is.business) 
    } 

    def finish() { 
    user.is.save 
    } 

} 

/* 
*Screen for user login 
*/ 

object LoginScreen extends LiftScreen { 
    object user extends ScreenVar(MongoUser) 

    addFields(() => user.is.email) 
    addFields(() => user.is.password) 


    def finish() { 
    S.notice(
     user.is.login(
     user.email.toString, 
     user.password.toString).toString) 
    } 

} 

ho bisogno di fare in modo che nella schermata SignupWizard, l'indirizzo e-mail è unico. Posso fare questo modificando il campo email nella classe MongoUser in questo modo:

object email extends EmailField(this, 90) { 
     override def validations = { 
     emailUnique _ :: 
     super.validations 
     } 
} 

Ma ciò significa che ora regola di convalida viene applicata su login troppo, che ovviamente non è quello che voglio.

Domanda: Qual è il modo più efficace di aggiungere regole di convalida ad hoc ai campi MongoUser in diverse schermate?

risposta

0

Non mettere la convalida in questione nel record a tutti, e utilizzare un campo personalizzato nella procedura guidata:

object wizard extends Wizard { 
    // don't add the email field with addField() 
    val email = field("Email", user.is.email.is, trim, emailUnique _, ...) 
}