我有点意外,我读过的任何文档都没有涉及,或者我只是忽略了它。验证唯一条目似乎应该是常见的事情。
从表单创建新条目时,检查成员唯一性的首选方法是什么?
val memberForm = Form(
mapping(
"id" -> ignored(NotAssigned:Pk[Long]),
"membername" -> nonEmptyText,
"email" -> email,
"password" -> nonEmptyText
)(Member.apply)(Member.unapply)
)
是创建自定义验证程序的首选方法吗?
val validateMember(name: String, email: String) = {
// check unique name & email
}
或者应该采取其他方式吗?
答案 0 :(得分:1)
我通常喜欢将其视为业务逻辑而不是验证(因为它涉及与数据库交谈)。如果您同意这一点,那么在将表单数据读入Member
的实例后,将唯一性检查逻辑放在控制器中可能更合适。
如果错误,您仍然可以使用表单重新显示页面,并显示错误。
答案 1 :(得分:0)
也许这不是最大的问题,因为我认为这只是我过度思考问题而不是真正理解问题的一个例子。我提出的解决方案很简单:
val memberForm = Form(
mapping(
"id" -> ignored(NotAssigned:Pk[Long]),
"membername" -> nonEmptyText,
"email" -> email,
"password" -> nonEmptyText
)(Member.apply)(Member.unapply)
verifying ("Member already exists!", m => Member.findByName(m.membername).isEmpty)
verifying ("Email already exists!", m => Member.findByName(m.email).isEmpty)
)
Member.findByName()
中有逻辑,以确定它是在查看电子邮件还是标准成员名称。
这可能不是一个好问题和答案,所以如果任何有权删除它的人都感到自由。