前提・実現したいこと
内容は、トップページに投稿した内容の一覧を表示したいのですが、エラーが解除できずに困っています。
エラーを解除して投稿一覧をトップページに表示したいです。
railsのバージョンは『Rails 6.0.3.4』です。
画像の扱いとしてはImageMagickを使っています。
表示したい内容のデータはデータベースに保存されていることを確認しました。
###質問の内容
Ruby on Railsでアプリを作成しております。
トップページに投稿の一覧を表示する機能を実装中にエラーになりました。
まず、投稿したものの一覧を表示したいのですが、
画像の表示だけがうまくできません。
イメージを表示する一文を取り除くと他の項目は表示がうまくいくのでここが原因だと仮定しております。
エラー文を調べてみたのですがいくら考えても自分では解決ができませんでした。
発生している問題・エラーメッセージ
Sprockets::Rails::Helper::AssetNotFound in Prototypes#index Showing /Users/etsuya/projects/protospace-31640/app/views/prototypes/_prototype.html.erb where line #2 raised: The asset "" is not present in the asset pipeline.
該当のソースコード
routes.rb
Rails.application.routes.draw do devise_for :users root to: "prototypes#index" resources :prototypes, only: [:index, :new, :create] end
prototypes_controller.rb
class PrototypesController < ApplicationController def index @prototypes = Prototype.all end def new @prototype = Prototype.new end def create @prototype = Prototype.new(prototype_params) if @prototype.save redirect_to root_path else render :new end end private def prototype_params params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) end end
prototype.rb
class Prototype < ApplicationRecord has_many :comments belongs_to :user has_one_attached :image validates :title, presence: true validates :catch_copy, presence: true validates :concept, presence: true validates :image, presence: true end
index.html.erb
<main class="main"> <div class="inner"> <% if user_signed_in? %> <div class="greeting"> <%= "こんにちは" %> <%= link_to current_user.name, root_path, class: :greeting__link%> </div> <% end %> <div class="card__wrapper"> <%= render partial: 'prototype', collection: @prototypes %> </div> </div> </main>
_prototype.html.erb
<div class="card"> <%= link_to image_tag("#{prototype.image}", class: :card__img ), root_path%> <div class="card__body"> <%= link_to "#{prototype.title}", root_path, class: :card__title%> <p class="card__summary"> <%= "#{prototype.catch_copy}" %> </p> <%= link_to "by #{prototype.user.name}", root_path, class: :card__user %> </div> </div>
20XXXX_create_prototypes.rb
class CreatePrototypes < ActiveRecord::Migration[6.0] def change create_table :prototypes do |t| t.string :title, null: false, default:"" t.text :catch_copy t.text :concept t.references :user, foreign_key: true t.timestamps end end end
###後書き
プログラミング学習中の初学者です。
質問の仕方や常識の足りないところありましたら、ご指摘お願いします。
エラーの質問内容に関しまして簡単なことでしたら申し訳ないです。
ですが、長いこと調べても解決ができませんでした。
どうすれば表示ができるのかアドバイスをお願いいたします。