質問編集履歴
1
誤字や文法の修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
バリデーションのonオプションをupdate内でうまく発動したい。
|
body
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
validatesメソッドのonオプションの発動タイミングで悩んでいます。
|
2
2
|
|
3
3
|
```rails
|
4
4
|
package.rb
|
5
|
-
|
5
|
+
d
|
6
6
|
validates :haitatsu_kiboubi, presence: true, on: :step20
|
7
7
|
```
|
8
8
|
|
@@ -15,13 +15,14 @@
|
|
15
15
|
|
16
16
|
if @package.valid?(:step20) && @package.update(package_params)
|
17
17
|
flash[:success] = "更新されました。"
|
18
|
-
redirect_to root_path
|
18
|
+
redirect_to root_path
|
19
19
|
else
|
20
20
|
render "edit"
|
21
|
-
|
21
|
+
endd
|
22
22
|
end
|
23
23
|
```
|
24
|
-
と記述すれば、haitatsu_kiboubiが入
|
24
|
+
と記述すれば、入力フォームにhaitatsu_kiboubiの値が入っていれば更新されると思っていました。
|
25
|
+
が、実際は値なしと判断されて、editに差し戻されます。
|
25
26
|
|
26
27
|
if文の前後を入れ替えて
|
27
28
|
```rails
|
@@ -30,7 +31,7 @@
|
|
30
31
|
if @package.update(package_params) && @package.valid?(:step20)
|
31
32
|
|
32
33
|
```
|
33
|
-
と記述すると、バリデーション
|
34
|
+
と記述すると、バリデーションは効くのですが、先にupdateが働いてしまい、バリデーション対象外の項目はDBで更新されてしまいます。
|
34
35
|
|
35
36
|
そもそも最初から
|
36
37
|
```rails
|
@@ -38,4 +39,6 @@
|
|
38
39
|
|
39
40
|
validates :haitatsu_kiboubi, presence: true, on: :update
|
40
41
|
```
|
42
|
+
と記述すれば、問題ないのはわかっているのですが、update内で条件によってバリデーション対象を切り替えたいため、上記のような書き方をしています。
|
43
|
+
|
41
|
-
|
44
|
+
書き方を修正すれば動くのか、別のアプローチを取った方がいいのか、お教え下さい。
|