carrierwaveで画像が表示できません

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 47

castle

score 0

rails初心者です。
active_adminおよびcarrierwaveを使って管理画面で画像を投稿する機能を追加し、viewで表示しようとした際、以下のようなエラーが出てどのように解決すれば良いのかさっぱり分かりません。

ArgumentError in Studios#show

Can't resolve image into URL: undefined method `to_model' for #<ImageUploader:0x00007f5c5c2a7c80>
Did you mean?  to_xml


このサイトを参考に作っていました。
Railsで簡単にブログを作る1(初心者向け)

ソースコード

post_image.rb

class PostImage < ApplicationRecord
     mount_uploader :image, ImageUploader
     belongs_to :studio
end

studio.rb

class Studio < ApplicationRecord

    has_many :post_images
    accepts_nested_attributes_for :post_images

    validates :title, presence: true, length: { maximum: 50 }
    validates :tel, presence: true, length: { maximum: 50 }
    validates :date, presence: true, length: { maximum: 50 }
    validates :holiday, presence: true, length: { maximum: 50 }
    validates :address, presence: true, length: { maximum: 100 }
    validates :charge, presence: true, length: { maximum: 50 }
    validates :genre, presence: true, length: { maximum: 100 }
    validates :content, presence: true, length: { maximum: 500 }


end


studios/show.html.erb

<%= image_tag(@studio.post_images[0].image) %>

image_uploder

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick

   storage :file

   def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end



  #上限変更
  process :resize_to_limit => [700, 700]

  #JPGで保存
  process :convert => 'jpg'

  #サムネイルを生成
  version :thumb do
    process :resize_to_limit => [300, 300]
  end

  # jpg,jpeg,gif,pngのみ
  def extension_white_list
    %w(jpg jpeg gif png)
  end

  #ファイル名を変更し拡張子を同じにする
  def filename
    super.chomp(File.extname(super)) + '.jpg' 
  end

  #日付で保存
  def filename
    if original_filename.present?
      time = Time.now
      name = time.strftime('%Y%m%d%H%M%S') + '.jpg'
      name.downcase
    end
  end
end

ちなみに管理者ページ内ではきちんと画像が表示されました。

admin/studo.rb

ActiveAdmin.register Studio do


  permit_params :title, :tel, :date, :holiday, :address, :charge, :genre, :content, post_images_attributes: [:id, :image, :reference, :_destroy]

  form do |f|
    f.inputs do
      f.input :title
      f.input :tel
      f.input :date
      f.input :holiday
      f.input :address
      f.input :charge
      f.input :genre
      f.input :content
      f.has_many :post_images, allow_destroy: true,
                 new_record: true do |t|
        t.input :image
      end

    end
    f.actions
  end

end

admin/post_images.rb

ActiveAdmin.register PostImage do
#indexページ
  index do
    selectable_column
    id_column
    column :image do |b|
      image_tag(b.image.url(:thumb))
    end
    column :post_id
    column :created_at
    column :updated_at
    actions
  end

  #showページ
  show do
    attributes_table do
      row :image do |b|
        image_tag(b.image.url(:thumb))
      end
      row :created_at
      row :updated_at
    end
  end

  permit_params :image, :post_id

end
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる