質問編集履歴

1

入力終了前に送信してしまったため全面的に再入力

2018/12/11 16:28

投稿

Kaz_M
Kaz_M

スコア7

test CHANGED
@@ -1 +1 @@
1
- DBへ保存する前のオブジェクト削除につ
1
+ DBへ保存する前のオブジェクト削除した
test CHANGED
@@ -1,6 +1,8 @@
1
- DBへ保存する前のオブジェクトを削除する方法がわからず困って
1
+ DBへ保存する前のオブジェクトを削除し、DBに保存しなようにしたいで
2
2
 
3
+
4
+
3
- Userが複数のTaskを持つという形です
5
+ 以下の例はUserが複数のTaskを持つという形で、taskにはdatetime型のdateカラムがあるとしま
4
6
 
5
7
 
6
8
 
@@ -20,44 +22,6 @@
20
22
 
21
23
  end
22
24
 
23
-
24
-
25
- ```
26
-
27
-
28
-
29
- Taskを自動で複数生成した後に、ある条件下では特定のTaskを保存しないという処理にしたいのですが、まだDBに保存する前ですのでdestroyやdeleteを使用できないと思い困っています
30
-
31
-
32
-
33
- ```ruby
34
-
35
- class TasksController < ApplicationController
36
-
37
- def new
38
-
39
- @user = User.find(params[:id])
40
-
41
- end
42
-
43
-
44
-
45
- def create
46
-
47
- @task1 = @user.tasks.build(task_name: "Task1")
48
-
49
-
50
-
51
- @task2 = @user.tasks.build(task_name: "Task2")
52
-
53
- @task2 = @user.tasks.build(task_name: "Task2")
54
-
55
- end
56
-
57
- end
58
-
59
-
60
-
61
25
  ```
62
26
 
63
27
 
@@ -66,6 +30,96 @@
66
30
 
67
31
 
68
32
 
33
+ ユーザーの希望日(User.preferred_date)を渡してそれに基づいてTaskを自動で複数生成し、ある条件下では特定のTaskを保存しないという処理にしたいのですが、まだDBに保存する前ですのでdestroyやdeleteではない適切な方法がわからず悩んでいます
69
34
 
70
35
 
36
+
37
+
38
+
39
+ ```ruby
40
+
41
+ class TasksController < ApplicationController
42
+
43
+ def new_tasks_automativcally
44
+
45
+ @user = User.find(params[:id])
46
+
47
+ end
48
+
49
+
50
+
51
+ def create_tasks_automatically
52
+
53
+ @user = User.find(params[:id])
54
+
55
+
56
+
57
+    if @user.update(user_params) #user_paramsにはpreferred_dateが入る
58
+
59
+
60
+
61
+      @task1 = @user.tasks.build(task_name: "Task1")
62
+
63
+ @task1.date = @user.preferred_date
64
+
65
+
66
+
67
+ @task2 = @user.tasks.build(task_name: "Task2")
68
+
69
+ @task2.date = @task1.date + 5.years
70
+
71
+ if @task2.date > @user.birthday + 10.years
72
+
73
+ #ここで@task2を削除し、DBに保存しないようにしたい
74
+
75
+      #@task2.destroyで期待する動きはするが、データベースのモデルオブジェクトではないため適当ではない?
76
+
77
+ else
78
+
79
+ else
80
+
81
+ render :new_task_automatically
82
+
83
+ return
84
+
85
+ end
86
+
87
+
88
+
89
+ if @user.save
90
+
91
+ redirect_to user_path(@user)
92
+
93
+ else
94
+
95
+ render :new_task_automatically
96
+
97
+ end
98
+
99
+ end
100
+
101
+ #中略
102
+
103
+ end
104
+
105
+
106
+
107
+ ```
108
+
109
+ コメントに記載してあるとおりdestroyで期待した動きはするのですが、DBに保存してあるモデルオブジェクトに対してdestroyメソッドを呼び出しているわけではないため、不適切である気がします。
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+ 上のような例はオブジェクトを削除する条件が複雑ではないので、条件判別の後にオブジェクトを生成するかどうか判断すれば良いのですが、実際はtaskのdateをかなり加工するため、加工後のdateの値を判断して、その上で削除したいです
118
+
119
+
120
+
121
+
122
+
123
+ Railsの知識がまだ浅いため、[オブジェクトを作成後に削除]という動きにしたいのですが、
124
+
71
- どれだけ複雑な条件であっても、条件式で判別した後に、オブジェクトを生成しないという処理にすべきなのでしょうか
125
+ やはりどれだけ複雑な条件であっても、条件式で判別した後に、オブジェクトを生成しないという処理にすべきなのでしょうか