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

質問編集履歴

1

文字の修正

2020/07/11 03:09

投稿

kinta39_jpn
kinta39_jpn

スコア3

title CHANGED
File without changes
body CHANGED
@@ -12,15 +12,19 @@
12
12
  attributes_forはcreate、build同様FactoryBotによって定義されるメソッドだが、オブジェクトを生成せずに対象の属性をハッシュで返すという特徴がある、という説明でした。
13
13
 
14
14
  なので以下のテストコードにおいて
15
+ attributes_for(:message)によって
15
- factories/model.rbで設定されているuser_id , group_idも生成され、params内で値が重複してしまうと考えました。
16
+ factories/model.rbで設定されているuser_id , group_idもハッシュとして取り出され、params内で他で呼び出しているuser_idなどと値が重複してしまうと考えました。
16
- しかしattributes_for で外部キーであるuser_idなどが生成されないのはなぜでしょうか?
17
17
 
18
+ しかし実際はattributes_for(:message)で外部キーであるuser_idなどは取り出されません。
18
19
 
20
+ これははなぜでしょうか?
21
+
22
+ 問題の一文
19
23
  ```
20
24
  let(:params) { { group_id: group.id, user_id: user.id, message: attributes_for(:message)} }
21
25
  ```
22
26
 
23
- spec/factories/message.rb
27
+ spec/factories/message.rb(fctory_bot の message.rb の設定)
24
28
  ```
25
29
  FactoryBot.define do
26
30
 
@@ -35,7 +39,7 @@
35
39
  end
36
40
  ```
37
41
 
38
- messages_controller_spec.rb
42
+ messages_controller_spec.rb(実際の大枠のテストコード)
39
43
  ```
40
44
  describe '#create' do
41
45
  let(:params) { { group_id: group.id, user_id: user.id, message: attributes_for(:message)} }
@@ -57,9 +61,10 @@
57
61
  ```
58
62
 
59
63
  ### 試したこと
64
+ create(:message)とattributes_for(:message)それぞれの実際の値を
60
- そこで実際の値をbinding.pryを使用しターミナルで確認しました。
65
+ binding.pryを使用しターミナルで確認、比較しました。
61
66
 
62
- create(:message)の値は以下のようになります。
67
+ create(:message)の値は以下す。
63
68
 
64
69
  id: 6,
65
70
  text: "屈む開閉ごうけんハチのす。",
@@ -70,9 +75,9 @@
70
75
  updated_at: Sat, 11 Jul 2020 02:19:39 UTC +00:00>
71
76
 
72
77
 
73
- attributes_for(:message)は以下のようなハッシュが返されます。
78
+ attributes_for(:message)は以下す。
74
- やはり外部キーである user, group のIDが生成されていません。
75
79
 
76
80
  {:text=>"右翼隆起黒板汚す。", :image=>#<File:/Users/kida/projects/chat-space/public/images/test_image.jpg>}
77
81
 
82
+ attributes_for(:message)では、やはり外部キーである user, group のIDが生成されていません。
78
83
  なぜattributes_forでは外部キーなどの属性がハッシュに含まれていないのでしょうか?