shokun1209
@shokun1209 (s shoya)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Ruby on Rails6.0 carrierwaveを使用した複数画像投稿の表示ができない

解決したいこと

上記記事を参考にさせて頂きながらcarrierwaveを使用した複数画像投稿機能を実装しようとしております。

念のため、以下に自分のコードも記載させて頂きます。

# uploaders/image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base

  if Rails.env.development?
    storage :file
  elsif Rails.env.test?
    storage :file
  else
    storage :fog
  end

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

  # 受け付ける画像の種類
  def extension_whitelist
    %w(png jpg jpeg)
  end
end

# migration topicsテーブル

class CreateTopics < ActiveRecord::Migration[6.0]
  def change
    create_table :topics do |t|
      t.string :title, null: false
      t.text :text, null: false
      t.integer :category, null: false
      t.json :images
      t.references :user, null: false, foreign_key: true
      t.timestamps
    end
  end
end

# models/topic.rb

class Topic < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :category
  mount_uploaders :images, ImageUploader
  belongs_to :user

  with_options presence: true do
    validates :title, length: { maximum: 20 }
    validates :text, length: { maximum: 1000 }
    validates :category_id, numericality: { other_than: 1 }
  end
end
# config/initializers/carrierwave.rb

unless Rails.env.development? || Rails.env.test?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
      region: 'ap-northeast-1'
    }

    config.fog_directory  = '**********'
    config.cache_storage = :fog
  end
end

発生している問題・エラー

image.png

このように、画像がうまく表示できなくて困っております。。。

該当すると思われるコード

<%# topics/show.html.erb %>

<div class="show-main">
  <div class="show-topic">
    <h3>タイトル</h3>
    <%= @topic.title %>

    <h3>内容</h3>
    <%= @topic.text %>

    <h3>投稿画像</h3>
    <% @topic.images.each do |image| %>
      <%= image_tag image.url %>
    <% end %>
  </div>
</div>
# topics.controller.rb

class TopicsController < ApplicationController
  def index
    @topics = Topic.all.order('created_at DESC')
  end

  def new
    @topic = Topic.new
  end

  def create
    @topic = Topic.new(topic_params)
    if @topic.save
      redirect_to root_path
    else
      render :new
    end
  end

  def show
    @topic = Topic.find(params[:id])
  end

  private

  def topic_params
    params.require(:topic).permit(:title, :text, :category_id, :user_id,{images: []},:anonymous).merge(user_id: current_user.id)
  end
end

自分で試したこと

様々な記事を確認しましたが、表示の記法としては同様の記述だと思うのですが、問題が分かりません。。。

image.png

DBにはしっかり保存されている様子ですが、やはり取り出し方に問題があるのでしょうか??
初歩的な質問ですが、御助言頂けますと幸いです。

0

1Answer

モデル topic.rb に
serialize :images, JSON
の記述を追記したところ、表示されるようになりました。

0Like

Your answer might help someone💌