回答編集履歴

2

修正

2020/02/29 03:08

投稿

asm
asm

スコア15147

test CHANGED
@@ -176,7 +176,7 @@
176
176
 
177
177
  else
178
178
 
179
- [:root, Task.new(tasks_params)]
179
+ [:root, Task.new(task_params)]
180
180
 
181
181
  end
182
182
 

1

追記

2020/02/29 03:07

投稿

asm
asm

スコア15147

test CHANGED
@@ -31,3 +31,169 @@
31
31
  end
32
32
 
33
33
  ```
34
+
35
+
36
+
37
+
38
+
39
+ **追記**
40
+
41
+ ```ruby
42
+
43
+ if @group
44
+
45
+ redirect_to group_task_index_path(@group)
46
+
47
+ else
48
+
49
+ redirect_to :root
50
+
51
+ end
52
+
53
+ ```
54
+
55
+
56
+
57
+ で出来るとは思いますが
58
+
59
+ 分岐して、共通処理して、また同じ条件で分岐するというのはあまりよくないですね。
60
+
61
+ 後からコードを読む人が共通処理によって条件が変化する可能性を考慮する必要があるのが駄目です。
62
+
63
+
64
+
65
+ なので、次善としては
66
+
67
+
68
+
69
+ ```ruby
70
+
71
+ def create
72
+
73
+ if @group = Group.find_by(id: params[:group_id])
74
+
75
+ @task = @group.tasks.new(task_params)
76
+
77
+ if @task.save
78
+
79
+ redirect_to group_task_index_path(@group)
80
+
81
+ else
82
+
83
+ render :new
84
+
85
+ end
86
+
87
+ else
88
+
89
+ @task = Task.new(task_params)
90
+
91
+ if @task.save
92
+
93
+ redirect_to :root
94
+
95
+ else
96
+
97
+ render :new
98
+
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+
105
+ ```
106
+
107
+
108
+
109
+ ```ruby
110
+
111
+ def create
112
+
113
+ if @group = Group.find_by(id: params[:group_id])
114
+
115
+ group_create(@group, task_params)
116
+
117
+ else
118
+
119
+ private_create(task_params)
120
+
121
+ end
122
+
123
+ end
124
+
125
+
126
+
127
+ def group_create(group, param)
128
+
129
+ @task = group.tasks.new(param)
130
+
131
+ if @task.save
132
+
133
+ redirect_to group_task_index_path(group)
134
+
135
+ else
136
+
137
+ render :new
138
+
139
+ end
140
+
141
+ end
142
+
143
+ def private_create(param)
144
+
145
+ @task = Task.new(task_params)
146
+
147
+ if @task.save
148
+
149
+ redirect_to :root
150
+
151
+ else
152
+
153
+ render :new
154
+
155
+ end
156
+
157
+ end
158
+
159
+ ```
160
+
161
+
162
+
163
+ もしくは
164
+
165
+
166
+
167
+ ```ruby
168
+
169
+ def create
170
+
171
+ @group = Group.find_by(params[:group_id])
172
+
173
+ success_path, @task = if @group
174
+
175
+ [group_task_index_path(@group), @group.tasks.new(task_params)]
176
+
177
+ else
178
+
179
+ [:root, Task.new(tasks_params)]
180
+
181
+ end
182
+
183
+ if @task.save
184
+
185
+ redirect_to success_path
186
+
187
+ else
188
+
189
+ render :new
190
+
191
+ end
192
+
193
+ end
194
+
195
+ ```
196
+
197
+
198
+
199
+ ですかね