Can't resolve image into URL: undefined method `to_model'

画像表示ができないエラーである。

 

f:id:kc-masui:20200325155312p:plain

●前提

 ・carrierwaveで画像を投稿できる機能をつけて、投稿画像を一覧画面で表示しようとしています。

 ・seedファイルを使って初期表示用のアイテムをDBに登録済みである。そこで入れた画像データは’いらすとや’の画像のURLである。

 

●エラー部分

 この部分テンプレートで一覧記事の一個一個を定義しています。その画像部分で「表示がうまくできないよ!」と言っています。

 ImageUploaderの'to_model' methodというのがUndefinedだよって言ってます。

 

●思考

 Carrierwaveの仕組みは、formのfile_fieldから直接ファイルを投稿できるっていうものです。画像のURLを文字列として入力して保存するわけじゃない。なので、表示画像もそれにあわせて、Carrierwaveの機能で保存したファイルを直接呼び出している。

 しかし、seedファイルに保存してたレコードの画像はURLを保存していた。URLをCarrierwaveの機能で呼び出そうとしたからエラーになったのである。

 

●解決

① 該当部分に .url を追加する

= item.images.present? ? (image_tag item.images.first.image.url) : (image_tag "no_image.jpg")

 これによりURLの値でも取得してくれる。でも画像はちゃんと表示できなかった。やめた。

 

② seedファイルの中身を治した

 そうです。元から入れるレコードが悪さしていたので、面倒臭がらずそれを直すべきなのです。

 テーブルをリセットして、Seedファイルを直して、完了。

 

 

 扱うファイル形式とかデータ型とかももっと意識していかないとダメだなぁ。備忘備忘