2012-06-19 14 views
5

Estoy desarrollando mi clase de usuario en mi aplicación de elevación y he desarrollado dos formas, una para el registro de usuario y otra para el inicio de sesión de usuario.Validación ad-hoc para campos de registro en Levante

que tienen la siguiente clase de usuario:

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

Y las dos pantallas siguientes:

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

} 

necesito para asegurarse de que en la pantalla SignupWizard, la dirección de correo electrónico es único. Puedo hacer esto cambiando el campo de correo electrónico en la clase MongoUser así:

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

Pero eso significa que ahora regla de validación se aplica en la entrada también, lo que obviamente no es lo que quiero.

Pregunta: ¿Cuál es la forma más efectiva de agregar reglas de validación ad-hoc a mis campos de MongoUser en diferentes pantallas?

Respuesta

0

No ponga la validación de que se trate en el Registro en absoluto, y utilizar un campo personalizado en el Asistente:

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