1
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?

CarrierWaveで「can't resolve image into URL」エラーと解決方法

Posted at

はじめに

CarrierWaveで画像を表示しようとしたとき、以下のようなエラーに直面することがあります。

can't resolve image into URL (undefined method `to_model' for #<CarrierWave::Uploader::Base>)

この記事では、なぜこのエラーが発生するのか、そしてその解決方法について説明します。

症状

これまでは、以下のように .url を省略して画像を表示できていたのが、

<%= image_tag @user.avatar %>

アップデート後に上記のコードでエラーが発生するようになりました。

原因

CarrierWaveのアップローダーオブジェクトが直接URL文字列を返さなくなり、.url を使ってURLを取得することが必須になったためです。この動作変更により、CarrierWaveのオブジェクトそのものを image_tag で渡すと、URLを解決できなくなりました。

解決方法

以下のように、.url メソッドを明示的に使うことで解決できます。

# 修正後のコード
<%= image_tag @user.avatar.url if @user.avatar.present? %>

.present? を追加することで、画像がない場合のエラーも回避します。

まとめ

CarrierWaveのバージョンアップにより、.url の明示的な指定が必要になりました。この変更に対応してコードを修正し、画像を正しく表示しましょう。参考にした情報については以下をご参照ください。

参考リンク

CarrierWave can't resolve image into URL error - Stack Overflow

1
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
1
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?