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

回答編集履歴

2

修正

2020/02/29 03:08

投稿

asm
asm

スコア15149

answer CHANGED
@@ -87,7 +87,7 @@
87
87
  success_path, @task = if @group
88
88
  [group_task_index_path(@group), @group.tasks.new(task_params)]
89
89
  else
90
- [:root, Task.new(tasks_params)]
90
+ [:root, Task.new(task_params)]
91
91
  end
92
92
  if @task.save
93
93
  redirect_to success_path

1

追記

2020/02/29 03:07

投稿

asm
asm

スコア15149

answer CHANGED
@@ -14,4 +14,87 @@
14
14
  render :new
15
15
  end
16
16
  end
17
- ```
17
+ ```
18
+
19
+
20
+ **追記**
21
+ ```ruby
22
+ if @group
23
+ redirect_to group_task_index_path(@group)
24
+ else
25
+ redirect_to :root
26
+ end
27
+ ```
28
+
29
+ で出来るとは思いますが
30
+ 分岐して、共通処理して、また同じ条件で分岐するというのはあまりよくないですね。
31
+ 後からコードを読む人が共通処理によって条件が変化する可能性を考慮する必要があるのが駄目です。
32
+
33
+ なので、次善としては
34
+
35
+ ```ruby
36
+ def create
37
+ if @group = Group.find_by(id: params[:group_id])
38
+ @task = @group.tasks.new(task_params)
39
+ if @task.save
40
+ redirect_to group_task_index_path(@group)
41
+ else
42
+ render :new
43
+ end
44
+ else
45
+ @task = Task.new(task_params)
46
+ if @task.save
47
+ redirect_to :root
48
+ else
49
+ render :new
50
+ end
51
+ end
52
+ end
53
+ ```
54
+
55
+ ```ruby
56
+ def create
57
+ if @group = Group.find_by(id: params[:group_id])
58
+ group_create(@group, task_params)
59
+ else
60
+ private_create(task_params)
61
+ end
62
+ end
63
+
64
+ def group_create(group, param)
65
+ @task = group.tasks.new(param)
66
+ if @task.save
67
+ redirect_to group_task_index_path(group)
68
+ else
69
+ render :new
70
+ end
71
+ end
72
+ def private_create(param)
73
+ @task = Task.new(task_params)
74
+ if @task.save
75
+ redirect_to :root
76
+ else
77
+ render :new
78
+ end
79
+ end
80
+ ```
81
+
82
+ もしくは
83
+
84
+ ```ruby
85
+ def create
86
+ @group = Group.find_by(params[:group_id])
87
+ success_path, @task = if @group
88
+ [group_task_index_path(@group), @group.tasks.new(task_params)]
89
+ else
90
+ [:root, Task.new(tasks_params)]
91
+ end
92
+ if @task.save
93
+ redirect_to success_path
94
+ else
95
+ render :new
96
+ end
97
+ end
98
+ ```
99
+
100
+ ですかね