teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

Constraints\.nonEmpty\(\) を最初に評価するように

2017/02/10 07:51

投稿

tkawachi
tkawachi

スコア117

answer CHANGED
@@ -1,17 +1,24 @@
1
- `Constraint` を記述して `def verifying(constraints: Constraint[T]*): Mapping[T]` の方を使うと良いのではないでしょうか。次のようになると思います。
1
+ `Constraint` を記述して `def verifying(constraints: Constraint[T]*): Mapping[T]` の方を使うと良いのではないでしょうか。
2
+ verifying で指定した Constraint は途中でエラーが見つかっても全て評価されるため、最初のエラーで中断したい場合には1つの Constraint にチェックを詰める必要があります。
3
+ nonEmptyText の実装は `text verifying Constraints.nonEmpty` となっているので、`Constraints.nonEmpty` を利用すると次のようになると思います。
2
4
 
3
5
  ```scala
4
- import play.api.data.validation.{Constraint, Invalid, Valid}
6
+ import play.api.data.validation.{Constraint, Constraints, Invalid, Valid}
5
7
 
6
8
  val constraint = Constraint[String] { string =>
9
+ Constraints.nonEmpty(string) match {
10
+ case invalid: Invalid => invalid
11
+ case Valid =>
7
- if (/* チェック1 */) {
12
+ if (/* チェック1 */) {
8
- Invalid("check1 error")
13
+ Invalid("check1 error")
9
- } else if (/* チェック2 */) {
14
+ } else if (/* チェック2 */) {
10
- Invalid("check2 error")
15
+ Invalid("check2 error")
11
- } else {
16
+ } else {
12
- Valid
17
+ Valid
18
+ }
13
19
  }
14
20
  }
15
21
 
16
- nonEmptyText.verifying(constraint)
22
+ text.verifying(constraint)
17
- ```
23
+ ```
24
+

1

コードを変更

2017/02/10 07:51

投稿

tkawachi
tkawachi

スコア117

answer CHANGED
@@ -5,9 +5,9 @@
5
5
 
6
6
  val constraint = Constraint[String] { string =>
7
7
  if (/* チェック1 */) {
8
- Invalid("")
8
+ Invalid("check1 error")
9
9
  } else if (/* チェック2 */) {
10
- Invalid("")
10
+ Invalid("check2 error")
11
11
  } else {
12
12
  Valid
13
13
  }