前提・実現したいこと
rubyで、投稿したものを表示するというツールを作っています。
投稿した画像を表示させる機能の実装中です。
発生している問題・エラーメッセージ
その際に、
ruby
1 <%= link_to image_tag(prototype.image, class: :card__img ), prototype_path(prototype) %>
と記述し実行したところ、
ArgumentError in Prototype#index
Can't resolve image into URL: to_model delegated to attachment, but attachment is nil
とエラー表示されました。
該当のソースコード
index.html.erb
ruby
1<main class="main"> 2 <div class="inner"> 3 <% if user_signed_in? %> 4 <div class="greeting"> 5 こんにちは、 6 <%= link_to "#{current_user.id}", root_path, class: :greeting__link %> 7 </div> 8 <% else %> 9 <div class="card__wrapper"> 10 <% end %> 11 </div> 12 </div> 13 <%= render partial: "prototype"%> 14</main>
_prototype.html.erb
ruby
1<div class="card"> 2 <%= link_to image_tag(prototype.image, class: :card__img ), prototype_path(prototype) %> 3 <div class="card__body"> 4 <%= link_to prototype.title, prototype_path(prototype), class: :card__title%> 5 <p class="card__summary"> 6 <%= prototype.catch_copy %> 7 </p> 8 <%= link_to "by #{prototype.user.name}", user_path(prototype.user), class: :card__user %> 9 </div> 10</div>
prototype.rb
ruby
1class Prototype < ApplicationRecord 2 belongs_to :user 3 has_one_attached :image 4 5 validates :image, presence: true 6 validates :title, presence: true 7 validates :catch_copy, presence: true 8 validates :concept, presence: true 9 10 11end
user.rb
ruby
1class User < ApplicationRecord 2 devise :database_authenticatable, :registerable, 3 :recoverable, :rememberable, :validatable 4 5 validates :name, presence: true 6 validates :profile, presence: true 7 validates :occupation, presence: true 8 validates :position, presence: true 9 10 has_many :prototypes 11end 12
prototype_controller.rb
ruby
1class PrototypeController < ApplicationController 2 3 def index 4 @prototypes = Prototype.all 5 end 6 7 def new 8 @prototype = Prototype.new 9 end 10 11 def create 12 @prototype = Prototype.create(prototype_params) 13 if @prototype.valid? 14 redirect_to root_path 15 else 16 render :new 17 end 18 end 19 20 private 21 22 def prototype_params 23 params.permit(:image,:title,:catch_copy,:concept).merge(user_id: current_user.id) 24 end 25end
routes.rb
Rails.application.routes.draw do devise_for :users root to: 'prototype#index' resources :prototype,only: [:index,:new,:create] end
試したこと
アソシエーションが間違っているために、prototype.imageで取得できていないのだと思い、アソシエーションの見直しを行いましたが、間違いが発見できませんでした。
また、エラー表示を調べたのですが、イマイチわからない状態です。絶望しています。
半日中悩んでしまったのでこちらで相談させていただきました。
よろしくお願いします…
回答1件
あなたの回答
tips
プレビュー