回答編集履歴

3

content_paramsの変更

2021/03/22 12:05

投稿

yoshi_10_11
yoshi_10_11

スコア241

test CHANGED
@@ -147,3 +147,49 @@
147
147
 
148
148
 
149
149
  これで、次にどういったエラーが出るかまた確認したいです。よろしくお願いいたします。
150
+
151
+
152
+
153
+
154
+
155
+ **>>>>>>>>>>>>>>追記の追記の追記 2021.3.22 21:30**
156
+
157
+ 前回の修正により次の課題がcontent_paramsのエラー解消となったみたいですので、
158
+
159
+
160
+
161
+ ```ruby
162
+
163
+ params.require(:content).permit(:detail,:bank_id,:category_id,:user_id).merge(category_id: category.id ,user_id: current_user.id)
164
+
165
+ ```
166
+
167
+
168
+
169
+ ```ruby
170
+
171
+ params.require(:content).permit(:detail).merge(bank_id: params[:bank_id], category_id: params[:category_id] ,user_id: current_user.id)
172
+
173
+ ```
174
+
175
+ に変更して見てください。これで登録できるようになるはず…
176
+
177
+
178
+
179
+ エラーコードに**Parameter**として
180
+
181
+ ```ruby
182
+
183
+ {"authenticity_token"=>"Tdl19kGEpFdkQQsgEFHAKhHV4ef1idrapjM73+whvV89uRcWbR2njvyCGwwn3cbU8sqFiwfgQWd8arMK8sdQMw==",
184
+
185
+ "content"=>{"detail"=>"5000"},
186
+
187
+ "commit"=>"登録",
188
+
189
+ "bank_id"=>"2",
190
+
191
+ "category_id"=>"1"}
192
+
193
+ ```
194
+
195
+ が記載されていたと思います。こちらがparamsの値の正体です。Railsを使い始めたばかりでparamsにどんな値が入っているのかわからない、という場合にはエラーを出した際にこちらの値を確認するとわかりやすいです。他の機能を実装する際の参考にしてみてください。

2

時刻を記入

2021/03/22 12:05

投稿

yoshi_10_11
yoshi_10_11

スコア241

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- >>>>>>>>>追記
37
+ **>>>>>>>>>追記**
38
38
 
39
39
 
40
40
 
@@ -96,7 +96,7 @@
96
96
 
97
97
 
98
98
 
99
- >>>>>>>>>>追記の追記
99
+ **>>>>>>>>>>追記の追記 2021.3.22 08:30**
100
100
 
101
101
 
102
102
 

1

form_withのエラーに対して修正

2021/03/21 23:33

投稿

yoshi_10_11
yoshi_10_11

スコア241

test CHANGED
@@ -29,3 +29,121 @@
29
29
  ```
30
30
 
31
31
  の部分は誤字ですかね?もし意図的に加えたものであるならば、外しておきましょう
32
+
33
+
34
+
35
+
36
+
37
+ >>>>>>>>>追記
38
+
39
+
40
+
41
+ has_many :contentsはあるのですね
42
+
43
+
44
+
45
+ new.html.erb
46
+
47
+ <%= form_with model: [@bank,@category,@content], class: 'form', local: true do |f| %>
48
+
49
+
50
+
51
+ <%= form_with model: @content, class: 'form', local: true do |f| %>
52
+
53
+
54
+
55
+
56
+
57
+ contents_controller.rb
58
+
59
+ ※testは不要なコードだとお見受けしたので省略
60
+
61
+ def create
62
+
63
+ @bank = Bank.find(params[:bank_id])
64
+
65
+ @content = @bank.contents.new(content_params)
66
+
67
+
68
+
69
+ 一旦、ここまで修正してエラーがどう変化するか見てみたいです。
70
+
71
+ おそらく、ここまで変更すると、残りはcontent_paramsをどうするか、という課題だけが残るかと思います。
72
+
73
+
74
+
75
+ 当初、
76
+
77
+ @bank = Bank.find(params[:bank_id]),Category.find(params[:category_id])
78
+
79
+ と書いていたので、@bankにはBankのオブジェクトだけでなくCategoryオブジェクトも入ってしまっていたため、@bankにはオブジェクトの配列ができてしまっていました。
80
+
81
+ その証拠にundefined methods contents for <Array xxxxxx....>とエラー文が示すように、Array(=配列)にはcontentsはないですよ、というエラーになってしまっています。
82
+
83
+
84
+
85
+ ので、一旦コードをスッキリさせるために、Bankだけを取得するように書いてみる、ということです。
86
+
87
+
88
+
89
+ form_withの修正については、modelに複数書くことに意味がないため削除した、という理由だけです。
90
+
91
+
92
+
93
+ 上記、一旦確認してみてください。お願いいたします。
94
+
95
+
96
+
97
+
98
+
99
+ >>>>>>>>>>追記の追記
100
+
101
+
102
+
103
+ 次のエラーが
104
+
105
+ '''ruby
106
+
107
+ undefined method `contents_path' for #<#<Class:0x00007fb61254a4f0>:0x00007fb61d13f8c8>
108
+
109
+ '''
110
+
111
+ ですね。
112
+
113
+ 次は
114
+
115
+ ```html
116
+
117
+ <%= form_with model: @content, url: bank_category_contents_path, class: 'form', local: true do |f| %>
118
+
119
+ ```
120
+
121
+ に直せばたぶんいけるんじゃないかなと思います。もしくは、
122
+
123
+ ```html
124
+
125
+ <%= form_with model: @content, url: [@bank, @category, :contents], method: :post, class: 'form', local: true do |f| %>
126
+
127
+ ```
128
+
129
+ かなぁ。
130
+
131
+
132
+
133
+ こちらはform_withで生成されたformのURLがルーティングで見つからないよ、というエラーです。
134
+
135
+ 今回のようにmodelに@contentと設定すると、contents_pathが自動で設定されるようになります。
136
+
137
+
138
+
139
+ しかし、routes.rbの設定を伺うと、contents_pathに該当するパスはなく、かつ、ご希望を叶えるとするならばbanks/id/categories/id/contentsのパスを生成しなければなりません。
140
+
141
+ そのため、別途urlオプションにURLパスを指定してあげる必要があります。
142
+
143
+
144
+
145
+ 後者のほうはパスの別の書き方になります。上の方法がうまくいかなければお試しください。
146
+
147
+
148
+
149
+ これで、次にどういったエラーが出るかまた確認したいです。よろしくお願いいたします。