前提・実現したいこと
views/posts/show.htmlを表示させたいのですが、表題のエラーにより困っています。
Railsで記事の投稿アプリを作っています。
記事の詳細ページを表示する機能を実装中に以下のエラーメッセージが発生しました。
よろしくお願いします。
エラーメッセージ
ActiveRecord::RecordNotFound in PostsController#show Couldn't find Post with 'id'=show Extracted source (around line #51): 49 private 50 def set_params 51 @post = Post.find(params[:id]) 52 end 53 54 def post_params
posts_controller.rb
Ruby
1class PostsController < ApplicationController 2 before_action :set_params, only: [:show, :edit, :update, :destroy] 3 4 def index 5 @posts = Post.all 6 if params[:word].present? 7 @posts = Post.where("body like? or title like ?", "%#{params[:word]}%", "%#{params[:word]}%").order("id desc") 8 else 9 @posts = Post.all.order("id desc") 10 end 11 end 12 13 def show 14 end 15 16 def new 17 @post = Post.new 18 end 19 20 def create 21 @post = Post.new(post_params) 22 # binding.pry 23 if @post.save 24 redirect_to @post, notice: "作成できました" 25 else 26 render :new, alert: "作成できませんでした" 27 end 28 end 29 30 def edit 31 end 32 33 def update 34 if @post.update(post_params) 35 redirect_to @post, notice: "更新できました" 36 else 37 render :edit, alert: "更新できませんでした" 38 end 39 end 40 41 def destroy 42 if @post.destroy 43 redirect_to root_path, notice: "削除に成功しました" 44 else 45 redirect_to @post, alert: "削除できませんでした" 46 end 47 end 48 49 private 50 def set_params 51 @post = Post.find(params[:id]) 52 end 53 54 def post_params 55 params.require(:post).permit(:title, :body, :thumbnail, :latitude, :longitude).merge(user_id: current_user.id) 56 end 57end 58
views/posts/show.html.erb
Html
1<h1>詳細ページ</h1> 2 3 <h2>タイトル</h2> 4 <p><%= @post.title %></p> 5 <h2>本文</h2> 6 <p><%= @post.body %></p> 7 <h2>画像</h2> 8 <%= image_tag @post.thumbnail.url if @post.thumbnail? %> 9 10<%= link_to '編集', edit_post_path(@post)%> 11<%= link_to '削除', post_path(@post), method: :delete, data: {confirm: "削除してもよろしいでしょうか?"}%> 12 13 14<div id='map'></div> 15 16<style> 17#map { 18 height: 400px; 19 width: 70%; 20 margin: 0 auto; 21} 22</style> 23 24<script> 25 26let map 27let geocoder 28const display = document.getElementById('display') 29 30function initMap(){ 31 geocoder = new google.maps.Geocoder() 32 33 map = new google.maps.Map(document.getElementById('map'), { 34 center: {lat: <%= @post.latitude %>, lng: <%= @post.longitude %>}, 35 zoom: 12, 36 }); 37 38 marker = new google.maps.Marker({ 39 position: {lat: <%= @post.latitude %>, lng: <%= @post.longitude %>}, 40 map: map 41 }); 42 43} 44</script> 45<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAd8V0tsqUsMr8q0BPBANEf0xOQ2Un1YFE&callback=initMap" async defer></script> 46
config/routes.rb
Ruby
1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'posts#index' 4 resources :users 5 resources :posts 6 resources :categories 7 resources :hashtags 8 resources :images 9 resources :likes 10 resources :preservations 11end 12
試したこと
viewファイルの@postを@posts.idとしましたが変わりませんでした。
恐らくparams[:id]の中身が空だと言われているのだと思います。
そこでコンソールでparams[id]と入力したところ、
Uncaught ReferenceError: params is not defined at <anonymous>:1:1
と返ってきました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。