2012-06-19 5 views
5

Ich entwickle meine Benutzerklasse in meiner Aufzugsanwendung und habe zwei Formulare entwickelt, eines für die Benutzeranmeldung und eines für die Benutzeranmeldung.Ad-hoc-Validierung für Datensatzfelder in Lift

Ich habe folgende Benutzerklasse:

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")) 
     } 
    } 
} 

und die folgenden zwei Bildschirme:

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) 
    } 

} 

Ich muss dafür sorgen, dass in der SignupWizard Bildschirm, die E-Mail-Adresse eindeutig ist. Ich kann dies tun, indem Sie das E-Mail-Feld wie so in der MongoUser Klasse zu ändern:

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

Aber das bedeutet nun, dass Gültigkeitsregel auch bei der Anmeldung angewandt wird, das ist offensichtlich nicht das, was ich will.

Frage: Was ist der effektivste Weg, Ad-hoc-Validierungsregeln zu meinen MongoUser-Feldern in verschiedenen Bildschirmen hinzuzufügen?

Antwort

0

Legen Sie die Validierung in Frage in der Bilanz nicht, und ein benutzerdefiniertes Feld im Assistenten verwenden:

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