DBへ保存する前のオブジェクトを削除し、DBに保存しないようにしたいです。
以下の例はUserが複数のTaskを持つという形で、taskにはdatetime型のdateカラムがあるとします。
ruby
1class User < ApplicationRecord 2 has_many :tasks 3end 4 5class Task < ApplicationRecord 6 belongs_to :user 7end
ユーザーの希望日(User.preferred_date)を渡してそれに基づいてTaskを自動で複数生成し、ある条件下では特定のTaskを保存しないという処理にしたいのですが、まだDBに保存する前ですのでdestroyやdeleteではない適切な方法がわからず悩んでいます
ruby
1class TasksController < ApplicationController 2 def new_tasks_automativcally 3 @user = User.find(params[:id]) 4 end 5 6 def create_tasks_automatically 7 @user = User.find(params[:id]) 8 9 if @user.update(user_params) #user_paramsにはpreferred_dateが入る 10 11 @task1 = @user.tasks.build(task_name: "Task1") 12 @task1.date = @user.preferred_date 13 14 @task2 = @user.tasks.build(task_name: "Task2") 15 @task2.date = @task1.date + 5.years 16 if @task2.date > @user.birthday + 10.years 17 #ここで@task2を削除し、DBに保存しないようにしたい 18 #@task2.destroyで期待する動きはするが、データベースのモデルオブジェクトではないため適当ではない? 19 else 20 else 21 render :new_task_automatically 22 return 23 end 24 25 if @user.save 26 redirect_to user_path(@user) 27 else 28 render :new_task_automatically 29 end 30 end 31#中略 32end 33
コメントに記載してあるとおりdestroyで期待した動きはするのですが、DBに保存してあるモデルオブジェクトに対してdestroyメソッドを呼び出しているわけではないため、不適切である気がします。
上のような例はオブジェクトを削除する条件が複雑ではないので、条件判別の後にオブジェクトを生成するかどうか判断すれば良いのですが、実際はtaskのdateをかなり加工するため、加工後のdateの値を判断して、その上で削除したいです
Railsの知識がまだ浅いため、[オブジェクトを作成後に削除]という動きにしたいのですが、
やはりどれだけ複雑な条件であっても、条件式で判別した後に、オブジェクトを生成しないという処理にすべきなのでしょうか
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。