私は次のようにユーザーマッピングを持っています(他にもいくつかあります)
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
)
私が目にするもう1つの課題は、「id」が無視されるため、編集検証でidを取得する方法です。更新アクション メソッドで編集ケースを処理する必要がありますか?
アクションメソッドにエラーメッセージを追加する方法も混乱しているので、アクションメソッドの更新でそれを行う必要がある場合は、サンプルスニペットが最適です。
誰かがこれを達成する方法を提供してくれれば、本当に素晴らしいことです。
私は Play! で Scala を使っています。2.
ありがとう。