验证唯一条目?

时间:2014-09-17 03:03:31

标签: scala playframework-2.0

我有点意外,我读过的任何文档都没有涉及,或者我只是忽略了它。验证唯一条目似乎应该是常见的事情。

从表单创建新条目时,检查成员唯一性的首选方法是什么?

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
}

或者应该采取其他方式吗?

2 个答案:

答案 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()中有逻辑,以确定它是在查看电子邮件还是标准成员名称。

这可能不是一个好问题和答案,所以如果任何有权删除它的人都感到自由。