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

質問編集履歴

4

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

2020/07/10 09:52

投稿

Malson
Malson

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,23 +1,26 @@
1
1
  ### 前提・実現したいこと
2
2
  rubyで、3つの異なるテーブルのデータを一度に保存したい。
3
- モデルFolderのcreateアクション実行時に
3
+ モデルFolderのcreateアクション実行時に以下の3つの情報を格納したい
4
+ - Folderテーブルに格納すべき情報、
4
- - 1:多数の関係にある親子関係のモデルCardの情報
5
+ - 1:多数の関係にある親子関係のモデルCardの情報
5
- - 1:多数の関係にあるモデルFolderUsersの情報を同時に保存したいが、コントローラーでエラーが表示される。
6
+ - 1:多数の関係にあるモデルFolderUsersの情報
6
7
 
7
8
  ### 発生している問題・エラーメッセージ
8
- ActiveModel::UnknownAttributeError in FoldersController#create
9
+ **エラーは表示されていないが、controllerで@folderが保存できない。**
9
- unknown attribute 'user_id' for Folder.
10
- エラー該当箇所がcreateアクションの中の@folder = Folder.create(folder_params)という記述になります。このエラーメッセージの通り、user_idがカラムに存在しないということを伝えてきているのだと思いますが、
11
10
 
11
+ **パラメータを確認したところidが全てnilになっている。何故idが生成されないかの理由が判然とせず、またcardsに関しては何一つデータを取得することもできていない**
12
+ ```terminal
13
+ [1] pry(#<FoldersController>)> @folder
14
+ => #<Folder:0x00007f9d009ce7e0 id: nil, name: "aaaa">
15
+ [2] pry(#<FoldersController>)> @folder.cards
16
+ => [#<Card:0x00007f9d00a2c2a0 id: nil, omote: nil, ura: nil, folder_id: nil>]
12
- FoldersとUsersは多数:多数の関係にあり、2つの外部キーを持つ中間テーブルのFolderUsersが存在しています。
17
+ [3] pry(#<FoldersController>)> @folder.folder_users
13
- FolderとCardは1:多数の関係にあります。
14
- このエラーはコントローラーでのストロングパラメーターの定義がしっかりできていないということなのだと考え、記述の仕方に問題があるのではと考えています。記述方法をreferenceで確認したり、同じ様な問題に関するレビューを見て理解できても、どうしてもパラメーターの表現がうまくできない。
18
+ => [#<FolderUser:0x00007faa9d074f78 id: nil, folder_id: nil, user_id: 4>]
15
- 中間テーブルの部分の関係性がうまくストロングパラメータに表記できていないのではと考えていますが、
16
- Ruby初めたばかりで、そもそもこの考えが間違っているのか、合っているのかもわかっていません。
17
- ご教授お願いいたします。
19
+ ```
18
20
 
21
+
19
22
  ### 該当のソースコード
20
- ```ruby
23
+ ```contoroller
21
24
  class FoldersController < ApplicationController
22
25
 
23
26
  def index
@@ -30,7 +33,8 @@
30
33
  end
31
34
 
32
35
  def create
33
- @folder = Folder.create(folder_params) #ここでエラー
36
+ @folder = Folder.create(folder_params)
37
+ @folder.folder_users.new(user: current_user)
34
38
  if @folder.save
35
39
  redirect_to :root, notice: '新しいフォルダを作成しました'
36
40
  else
@@ -47,7 +51,7 @@
47
51
  ura: [],
48
52
  folder_id: []
49
53
  }
50
- ).merge(user_id: current_user.id)
54
+ )
51
55
  end
52
56
  end
53
57
 
@@ -55,8 +59,6 @@
55
59
 
56
60
  ### 試したこと
57
61
 
58
- requireに2つのモデルを配置=>引数エラー
59
- 試していないですが、モデルにuser_idを加えて1:多数の関係を作り上げる必要があるのでしょうか?
60
62
 
61
63
  ### 補足情報(FW/ツールのバージョンなど)
62
64
  ```table

3

タイトルの変更

2020/07/10 09:52

投稿

Malson
Malson

スコア10

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

2

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

2020/07/10 07:49

投稿

Malson
Malson

スコア10

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

1

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

2020/07/10 06:11

投稿

Malson
Malson

スコア10

title CHANGED
File without changes
body CHANGED
@@ -72,4 +72,36 @@
72
72
  resources :cards, only: [:index, :new, :create, :edit]
73
73
  end
74
74
  ~~~略~~~
75
- ```
75
+ ```
76
+
77
+ アドバイスに従い以下のファイルを追記いたします
78
+ ```ViewFile
79
+ = form_with model: folder, local: true do |f|
80
+ = f.label :name, "フォルダ名"
81
+ = f.text_field :name
82
+ = f.fields_for :cards do |c|
83
+ = c.label :omote, "カード(問題)"
84
+ = c.text_area :omote
85
+ = c.label :ura, "カード(解答)"
86
+ = c.text_area :ura
87
+ = f.submit
88
+ ```
89
+ ```FolderModel
90
+ class Folder < ApplicationRecord
91
+ has_many :folder_users
92
+ has_many :users, through: :folder_users
93
+ has_many :cards, dependent: :destroy
94
+ accepts_nested_attributes_for :cards
95
+ validates :name, presence: true
96
+ end
97
+ ```
98
+ ```CardModel
99
+ class Card < ApplicationRecord
100
+ belongs_to :folder, optional: true
101
+ validates :omote, presence: true
102
+ validates :ura, presence: true
103
+ end
104
+ ```
105
+ 参考にした記事など
106
+ https://qiita.com/hmuronaka/items/580b977834d4b3010454
107
+ https://qiita.com/tseno/items/70d39f7c0e8e1c779b5e