validatesメソッドのonオプションの発動タイミングで悩んでいます。
rails
1package.rb 2d 3validates :haitatsu_kiboubi, presence: true, on: :step20
これをupdateで
rails
1packages_controller 2 3 def update 4 5 if @package.valid?(:step20) && @package.update(package_params) 6 flash[:success] = "更新されました。" 7 redirect_to root_path 8 else 9 render "edit" 10 endd 11 end
と記述すれば、入力フォームにhaitatsu_kiboubiの値が入っていれば更新されると思っていました。
が、実際は値なしと判断されて、editに差し戻されます。
if文の前後を入れ替えて
rails
1packages_controller 2 3if @package.update(package_params) && @package.valid?(:step20) 4
と記述すると、バリデーションは効くのですが、先にupdateが働いてしまい、バリデーション対象外の項目はDBで更新されてしまいます。
そもそも最初から
rails
1package.rb 2 3validates :haitatsu_kiboubi, presence: true, on: :update
と記述すれば、問題ないのはわかっているのですが、update内で条件によってバリデーション対象を切り替えたいため、上記のような書き方をしています。
書き方を修正すれば動くのか、別のアプローチを取った方がいいのか、お教え下さい。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/27 05:55
2020/08/27 06:05