`attach' が使えないよと怒られた話
フリマアプリに大苦戦してるヲキヨです。
テストコード地獄から抜け出したい!!
しかしプルリクエストを送ると
「example6追加してください^^」
鬼ですか!!!www
テックキャンプの人はドSなんじゃないかと思えてきた・・・・(まぁあの社長だからな・・・・)
テストコードを実行すると出てくるエラー
-----------------------------------------------
1) Item アイテムの保存 アイテムが保存できる場合 全ての情報が存在すれば登録できる
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
-----------------------------------------------
`attach'が使えない。
結論から言うとimageのアソシエーションにbelongs_toを使っているからでした。
imageはActiveStorageで管理されているためアソシエーションはhas_one_attached
にしなければいけないとのことでした。
app/modes/item.rb
imageのアソシエーションにbelongs_toを使っている
spec/factory/items.rb
imageを関連づけているattachが使えないと言われる。
メンターさんでも少し考えるくらい珍しいエラーでした。
(それくらいの凡ミスってことorz)
spec/modes/item_spec.rb
エラー文全文
Item
アイテムの保存
アイテムが保存できる場合
全ての情報が存在すれば登録できる (FAILED - 1)
アイテムが保存できない場合
・・・imageが空では登録できない (FAILED - 2)
nameが空だとアイテムは保存できない (FAILED - 3)
商品の説明がないとアイテムは保存できない (FAILED - 4)
カテゴリーの情報がないとアイテムは保存できない (FAILED - 5)
・・・カテゴリーの情報は1以外でないと登録できない (FAILED - 6)
商品の状態の情報がないとアイテムは保存できない (FAILED - 7)
・・・商品の状態の情報は1以外でないと登録できない (FAILED - 8)
配送料の負担の情報がないとアイテムは保存できない (FAILED - 9)
・・・配送料の負担の情報は1以外でないと登録できない (FAILED - 10)
発送元の地域の情報がないとアイテムは保存できない (FAILED - 11)
・・・発送元の地域の情報は1以外でないと登録できない (FAILED - 12)
発送までの日数の情報がないとアイテムは保存できない (FAILED - 13)
・・・発送までの日数は1以外でないと登録できない (FAILED - 14)
価格の情報がないとアイテムは保存できない (FAILED - 15)
価格の範囲がの¥300~¥9,999,999の間でないとアイテムは保存できない (FAILED - 16)
価格が299円以下だと出品できない (FAILED - 17)
価格が10000000円以上だと出品できない (FAILED - 18)
価格は半角数字のみでないとアイテムは保存できない (FAILED - 19)
Failures:
1) Item アイテムの保存 アイテムが保存できる場合 全ての情報が存在すれば登録できる
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
2) Item アイテムの保存 アイテムが保存できない場合 ・・・imageが空では登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
3) Item アイテムの保存 アイテムが保存できない場合 nameが空だとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
4) Item アイテムの保存 アイテムが保存できない場合 商品の説明がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
5) Item アイテムの保存 アイテムが保存できない場合 カテゴリーの情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
6) Item アイテムの保存 アイテムが保存できない場合 ・・・カテゴリーの情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
7) Item アイテムの保存 アイテムが保存できない場合 商品の状態の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
8) Item アイテムの保存 アイテムが保存できない場合 ・・・商品の状態の情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
9) Item アイテムの保存 アイテムが保存できない場合 配送料の負担の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
10) Item アイテムの保存 アイテムが保存できない場合 ・・・配送料の負担の情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
11) Item アイテムの保存 アイテムが保存できない場合 発送元の地域の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
12) Item アイテムの保存 アイテムが保存できない場合 ・・・発送元の地域の情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
13) Item アイテムの保存 アイテムが保存できない場合 発送までの日数の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
14) Item アイテムの保存 アイテムが保存できない場合 ・・・発送までの日数は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
15) Item アイテムの保存 アイテムが保存できない場合 価格の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
16) Item アイテムの保存 アイテムが保存できない場合 価格の範囲がの¥300~¥9,999,999の間でないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
17) Item アイテムの保存 アイテムが保存できない場合 価格が299円以下だと出品できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
18) Item アイテムの保存 アイテムが保存できない場合 価格が10000000円以上だと出品できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
19) Item アイテムの保存 アイテムが保存できない場合 価格は半角数字のみでないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'
Finished in 0.52755 seconds (files took 5.33 seconds to load)
19 examples, 19 failures
Failed examples:
rspec ./spec/models/item_spec.rb:10 # Item アイテムの保存 アイテムが保存できる場合 全ての情報が存在すれば登録できる
rspec ./spec/models/item_spec.rb:16 # Item アイテムの保存 アイテムが保存できない場合 ・・・imageが空では登録できない
rspec ./spec/models/item_spec.rb:21 # Item アイテムの保存 アイテムが保存できない場合 nameが空だとアイテムは保存できない
rspec ./spec/models/item_spec.rb:27 # Item アイテムの保存 アイテムが保存できない場合 商品の説明がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:33 # Item アイテムの保存 アイテムが保存できない場合 カテゴリーの情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:38 # Item アイテムの保存 アイテムが保存できない場合 ・・・カテゴリーの情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:44 # Item アイテムの保存 アイテムが保存できない場合 商品の状態の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:49 # Item アイテムの保存 アイテムが保存できない場合 ・・・商品の状態の情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:55 # Item アイテムの保存 アイテムが保存できない場合 配送料の負担の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:60 # Item アイテムの保存 アイテムが保存できない場合 ・・・配送料の負担の情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:65 # Item アイテムの保存 アイテムが保存できない場合 発送元の地域の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:70 # Item アイテムの保存 アイテムが保存できない場合 ・・・発送元の地域の情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:76 # Item アイテムの保存 アイテムが保存できない場合 発送までの日数の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:81 # Item アイテムの保存 アイテムが保存できない場合 ・・・発送までの日数は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:87 # Item アイテムの保存 アイテムが保存できない場合 価格の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:92 # Item アイテムの保存 アイテムが保存できない場合 価格の範囲がの¥300~¥9,999,999の間でないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:97 # Item アイテムの保存 アイテムが保存できない場合 価格が299円以下だと出品できない
rspec ./spec/models/item_spec.rb:102 # Item アイテムの保存 アイテムが保存できない場合 価格が10000000円以上だと出品できない
rspec ./spec/models/item_spec.rb:107 # Item アイテムの保存 アイテムが保存できない場合 価格は半角数字のみでないとアイテムは保存できない