Проверка другой модели на имя пользователя в Scala Play! 2 отображения формы в создание и обновление
У меня есть пользовательское сопоставление следующим образом (есть также несколько других)
val userMapping: Mapping[User] = mapping(
"id" -> ignored(NotAssigned: Pk[Long]),
"title" -> nonEmptyText,
"name" -> nonEmptyText,
"userName" -> nonEmptyText,
"skype" -> nonEmptyText,
"emailId" -> ignored("": String),
"secondaryEmailId" -> ignored("": String),
"password" -> ignored("": String),
"position" -> optional(text),
"active" -> boolean,
"subscribeEmail" -> boolean,
"creationDate" -> optional(date("yyyy-MM-dd")),
"lastUpdatedDate" -> optional(date("yyyy-MM-dd"))
)(User.apply)(User.unapply)
Проблема заключается в том, если я применяю проверку для userName как
"userName" -> nonEmptyText.verifying("User name is already taken", user => !User.findUserByUserName(user.userName).isDefined)
это прекрасно работает при создании пользователя, но при редактировании эта проверка нарушается. Я хочу повторно использовать одно и то же отображение для создания и обновления.
В настоящее время я переместил его из поля формы на уровень формы, но пока все ошибки уровня формы не пройдут, эта проверка никогда не будет достигнута и не будет показана.
Мое полное отображение формы выглядит следующим образом (та же проблема с названием компании).
val registerForm:Form[(User,Company)] = Form(
mapping(
"user" -> userMapping.verifying("User name is already taken", user => !User.findUserByUserName(user.userName).isDefined),
"password" -> passwordMapping,
"company" -> companyMapping.verifying("Company name is already registered", company => !Company.findCompanyByCompanyName(company.name).isDefined),
"emailPair" -> emailPairMapping
){(user,passwords,company,emailPair) => (user.copy(password = passwords._1,emailId = emailPair._1,secondaryEmailId = emailPair._2,active = true),company)} //binding apply
{userCompanyTuple => Some(userCompanyTuple._1, ("",""),userCompanyTuple._2,(userCompanyTuple._1.emailId,userCompanyTuple._1.secondaryEmailId))} //un binding un apply
)
Для случая редактирования у меня отображается как (проверка еще должна быть применена)
val registerFormEdit:Form[(User,Company)] = Form(
mapping(
"user" -> userMapping,
"company" -> companyMapping,
"emailPair" -> emailPairMapping
){(user,company,emailPair) => (user.copy(emailId = emailPair._1,secondaryEmailId = emailPair._2,active = true),company)} //binding apply
{userCompanyTuple => Some(userCompanyTuple._1,userCompanyTuple._2,(userCompanyTuple._1.emailId,userCompanyTuple._1.secondaryEmailId))} //un binding un apply
)
Другая проблема, которую я вижу, заключается в том, как получить идентификатор при проверке правки какЯ бы" игнорируется Придется ли обрабатывать случай редактирования в методе действия обновления?
Если яМне придется сделать это в примере фрагмента метода обновления действия, было бы здорово, так как я также запутался, как добавить сообщения об ошибках в метод действия.
Было бы очень здорово, если бы кто-то предоставил информацию о том, как это можно сделать.
Я использую Scala с Play! 2.
Благодарю.