Проверка другой модели на имя пользователя в 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.

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос