質問編集履歴

4

@folderの情報が取得できていない

2020/07/10 09:52

投稿

Malson
Malson

スコア10

test CHANGED
File without changes
test CHANGED
@@ -2,41 +2,47 @@
2
2
 
3
3
  rubyで、3つの異なるテーブルのデータを一度に保存したい。
4
4
 
5
- モデルFolderのcreateアクション実行時に
5
+ モデルFolderのcreateアクション実行時に以下の3つの情報を格納したい
6
+
6
-
7
+ - Folderテーブルに格納すべき情報、
8
+
7
- - 1:多数の関係にある親子関係のモデルCardの情報
9
+ - 1:多数の関係にある親子関係のモデルCardの情報
8
-
10
+
9
- - 1:多数の関係にあるモデルFolderUsersの情報を同時に保存したいが、コントローラーでエラーが表示される。
11
+ - 1:多数の関係にあるモデルFolderUsersの情報
10
12
 
11
13
 
12
14
 
13
15
  ### 発生している問題・エラーメッセージ
14
16
 
15
- ActiveModel::UnknownAttributeError in FoldersController#create
17
+ **エラーは表示されていないが、controllerで@folderが保存できない。**
18
+
19
+
20
+
16
-
21
+ **パラメータを確認したところidが全てnilになっている。何故idが生成されないかの理由が判然とせず、またcardsに関しては何一つデータを取得することもできていない**
22
+
23
+ ```terminal
24
+
17
- unknown attribute 'user_id' for Folder.
25
+ [1] pry(#<FoldersController>)> @folder
26
+
18
-
27
+ => #<Folder:0x00007f9d009ce7e0 id: nil, name: "aaaa">
28
+
29
+ [2] pry(#<FoldersController>)> @folder.cards
30
+
19
- エラー該当箇所がcreateアクションの中の@folder = Folder.create(folder_params)という記述になります。このエラーメッセージの通り、user_idがカラムに存在しないということを伝えてきているのだと思いますが、
31
+ => [#<Card:0x00007f9d00a2c2a0 id: nil, omote: nil, ura: nil, folder_id: nil>]
20
-
21
-
22
-
32
+
23
- FoldersとUsersは多数:多数の関係にあり、2つの外部キーを持つ中間テーブルのFolderUsersが存在しています。
33
+ [3] pry(#<FoldersController>)> @folder.folder_users
24
-
25
- FolderとCardは1:多数の関係にあります。
34
+
26
-
27
- このエラーはコントローラーでのストロングパラメーターの定義がしっかりできていないということなのだと考え、記述の仕方に問題があるのではと考えています。記述方法をreferenceで確認したり、同じ様な問題に関するレビューを見て理解できても、どうしてもパラメーターの表現がうまくできない。
35
+ => [#<FolderUser:0x00007faa9d074f78 id: nil, folder_id: nil, user_id: 4>]
28
-
29
- 中間テーブルの部分の関係性がうまくストロングパラメータに表記できていないのではと考えていますが、
36
+
30
-
31
- Ruby初めたばかりで、そもそもこの考えが間違っているのか、合っているのかもわかっていません。
32
-
33
- ご教授お願いいたします。
37
+ ```
38
+
39
+
34
40
 
35
41
 
36
42
 
37
43
  ### 該当のソースコード
38
44
 
39
- ```ruby
45
+ ```contoroller
40
46
 
41
47
  class FoldersController < ApplicationController
42
48
 
@@ -62,7 +68,9 @@
62
68
 
63
69
  def create
64
70
 
65
- @folder = Folder.create(folder_params) #ここでエラー
71
+ @folder = Folder.create(folder_params)
72
+
73
+ @folder.folder_users.new(user: current_user)
66
74
 
67
75
  if @folder.save
68
76
 
@@ -96,7 +104,7 @@
96
104
 
97
105
  }
98
106
 
99
- ).merge(user_id: current_user.id)
107
+ )
100
108
 
101
109
  end
102
110
 
@@ -112,10 +120,6 @@
112
120
 
113
121
 
114
122
 
115
- requireに2つのモデルを配置=>引数エラー
116
-
117
- 試していないですが、モデルにuser_idを加えて1:多数の関係を作り上げる必要があるのでしょうか?
118
-
119
123
 
120
124
 
121
125
  ### 補足情報(FW/ツールのバージョンなど)

3

タイトルの変更

2020/07/10 09:52

投稿

Malson
Malson

スコア10

test CHANGED
@@ -1 +1 @@
1
- Ruby つの異なるテーブルデータを一度に保存したい
1
+ Ruby 3つの異なるテーブルデータを一度に保存したい
test CHANGED
File without changes

2

2つのテーブルではなく、3つのテーブルの情報を保存したかったため

2020/07/10 07:49

投稿

Malson
Malson

スコア10

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- rubyで、つの異なるテーブルのデータを一度に保存したい。
3
+ rubyで、3つの異なるテーブルのデータを一度に保存したい。
4
+
4
-
5
+ モデルFolderのcreateアクション実行時に
6
+
7
+ - 1:多数の関係にある親子関係のモデルCardの情報
8
+
5
- モデルFolderに対して1:多数の関係にある親子関係のモデルCardの情報を同時に保存したいが、コントローラーでエラーが
9
+ - 1:多数の関係にあるモデルFolderUsersの情報を同時に保存したいが、コントローラーでエラーが表示され
6
10
 
7
11
 
8
12
 

1

補足事項にモデルとビューのファイルの記載内容を追加いたしました

2020/07/10 06:11

投稿

Malson
Malson

スコア10

test CHANGED
File without changes
test CHANGED
@@ -147,3 +147,67 @@
147
147
  ~~~略~~~
148
148
 
149
149
  ```
150
+
151
+
152
+
153
+ アドバイスに従い以下のファイルを追記いたします
154
+
155
+ ```ViewFile
156
+
157
+ = form_with model: folder, local: true do |f|
158
+
159
+ = f.label :name, "フォルダ名"
160
+
161
+ = f.text_field :name
162
+
163
+ = f.fields_for :cards do |c|
164
+
165
+ = c.label :omote, "カード(問題)"
166
+
167
+ = c.text_area :omote
168
+
169
+ = c.label :ura, "カード(解答)"
170
+
171
+ = c.text_area :ura
172
+
173
+ = f.submit
174
+
175
+ ```
176
+
177
+ ```FolderModel
178
+
179
+ class Folder < ApplicationRecord
180
+
181
+ has_many :folder_users
182
+
183
+ has_many :users, through: :folder_users
184
+
185
+ has_many :cards, dependent: :destroy
186
+
187
+ accepts_nested_attributes_for :cards
188
+
189
+ validates :name, presence: true
190
+
191
+ end
192
+
193
+ ```
194
+
195
+ ```CardModel
196
+
197
+ class Card < ApplicationRecord
198
+
199
+ belongs_to :folder, optional: true
200
+
201
+ validates :omote, presence: true
202
+
203
+ validates :ura, presence: true
204
+
205
+ end
206
+
207
+ ```
208
+
209
+ 参考にした記事など
210
+
211
+ https://qiita.com/hmuronaka/items/580b977834d4b3010454
212
+
213
+ https://qiita.com/tseno/items/70d39f7c0e8e1c779b5e