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

質問編集履歴

1

誤字や文法の修正

2020/08/27 05:53

投稿

kohdohg
kohdohg

スコア12

title CHANGED
@@ -1,1 +1,1 @@
1
- railsのバリデーションのonオプションで、update直前にチェックしたい
1
+ バリデーションのonオプションupdate内でうまく発動したい
body CHANGED
@@ -1,8 +1,8 @@
1
- railsのvalidatesメソッドのonオプションの発動タイミングで悩んでいます。
1
+ validatesメソッドのonオプションの発動タイミングで悩んでいます。
2
2
 
3
3
  ```rails
4
4
  package.rb
5
-
5
+
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 #メニュー(user/id)へ
18
+ redirect_to root_path
19
19
  else
20
20
  render "edit"
21
- end
21
+ endd
22
22
  end
23
23
  ```
24
- と記述すれば、haitatsu_kiboubiが入力されていれば更新されると思っていたのですが、空白と判断されて、editに差し戻しにされてしまします
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
- と記述すると、バリデーションとしては効くのですが、先にupdateが働いてしまうので、バリデーション対象外の項目はDBに保存されてしまいます。
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
+ 書き方を修正すれば動くのか、別のアプローチを取た方がお教え下さい。