NoMethodError in Prototypes#index
undefined method `id' for nil:NilClass
と表示される。
コードの表示(ブロック)
prototype_controller 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 def prototype_params params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) end end
prototypes 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: 'prototypes/prototype', collection: @prototypes %> </div> </div> </main>
prototypes _prototype.html.erb <div class="card"> <%= link_to image_tag(prototype.image, class: :card__img), prototype_path(@prototype.id) %> <div class="card__body"> <%= link_to 'prototype.title', prototype_path(@prototype.id), class: :card__title %> <p class="card__summary"> <%= prototype.catch_copy %> </p> <%= link_to "by #{prototype.user.name}", prototype_path(@prototype.id), class: :card__user %> </div> </div>
config routes.rb Rails.application.routes.draw do devise_for :users root to: 'prototypes#index' resources :prototypes, only: [:index, :new, :create] end
db create_prototypes.rb class CreatePrototypes < ActiveRecord::Migration[6.0] def change create_table :prototypes do |t| t.string :title t.text :catch_copy t.text :concept t.text :image t.references :user, null: false, foreign_key: true t.timestamps end end end
models prototype.rb class Prototype < ApplicationRecord belongs_to :user has_one_attached :image validates :title, presence: true validates :catch_copy, presence: true validates :concept, presence: true validates :image, presence: true belongs_to :user end
プロトタイプを表示させたいのにエラーが出て表示できません。
回答1件
あなたの回答
tips
プレビュー