0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ActiveStorage】アソシエーションを組んでいるのに画像が表示されない。

Last updated at Posted at 2021-04-12

こんにちは、プログラミング初学者のkoheiです。

今日は

Active Storageをインストールし、アソシエーションを組んでいるのに画像が表示されない。

ということがありました。

ビューファイルを制作するためにtestで1つだけレコードを作成。
Active Storageで画像は保存できています。
それなのにimage_tagで画像を呼び出せませんでした。

結論から言うと、
変数に代入したパラメーターへの認識の甘さが原因でした。

今回登場するのは"parts"コントローラーとビューのみです。

まず
partsコントローラーにて

def index
    @parts = Part.all
end

ビューファイルにて

 <%= image_tag @parts.image if @parts.image.attached? %>

と記述しました。
するとNoMethodErrorがでます。
上記で既に間違っているので、慣れている方は普通に気付くんだと思います。

しかし、初心者の私は焦ります。笑

エラー文に
undefined method `image' for #Part::ActiveRecord_Relation:0x00007f8566f76140
とあったため

@partsのパラメーターを確認したところ、
imageが含まれていないじゃないか! ということでモデルからマイグレーションファイルまで覗き始めました。笑
↑ちなみに含まれてないことは問題ではありませんでした!

色々探して最終的に間違いはコントローラーにあることに気づきます。
以下のように記述すべきでした。

 def index
    @parts = find(2)  
 end

Part.allがダメだった理由としては
allとすることで@partsに代入される値がハッシュ構造となってしまうためです
確認するとパラメーターは以下の様になっていました。

@parts
=> [#<Part:0x00007fb31f995b90
  id: 2,
  name: "test",
  info: "test"]

Part.find(2)だと以下の様になります。

@parts
=> #<Part:0x00007fb31ffc6758
 id: 2,
 name: "test",
 info: "test"

アプリとしてはpartsを一覧表示させたいので
最終的にはPart.allとeach文で進めていきます。

とにかく、allの中身が1つでも配列で出力されるということが分かり、自分としてはとても勉強になりました。
同じく初心者の方はお気をつけ下さい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?