実現したいこと
投稿内容を表示させたい
前提
簡単なSNSサイトを作っているのですが投稿内容が表示されず行き詰まっています。
投稿詳細ページに遷移した際、以下のエラーが発生してしまいます。
発生している問題・エラーメッセージ
ActiveRecord::UnknownPrimaryKey in Public::PostsController#show Unknown primary key for table posts in model Post. Extracted source (around line #8): def show @post = Post.find(params[:id]) ←エラー該当箇所 end
該当のソースコード
/app/views/public/posts/show.html.erb <h1>投稿詳細</h1> <table style="table"> <tr> <th> <p>店名</p> </th> <td> <p><%= @post.store_name %></p> </td> </tr> <tr> <th> <p>郵便番号</p> </th> <td> <p><%= @post.post_code %></p> </td> </tr> <tr> <th> <p>住所</p> </th> <td> <p><%= @post.address %></p> </td> </tr> <tr> <th> <p>住所</p> </th> <td> <p><%= @post.address %></p> </td> </tr> </table> <h3><%= @user.last_name %> <%= @user.first_name %>さんの投稿一覧</h3> 作成中
/app/controllers/public/posts_controller.rb class Public::PostsController < ApplicationController def index @posts = Post.all #@post = @post.id end def show @post = Post.find(params[:id]) end def new @post = Post.new end def edit end def create @post = Post.new(post_params) @post.user_id = current_user.id # binding.pry @post.save redirect_to posts_path end private def post_params params.require(:post).permit(:store_name, :post_code, :address, :regular_holiday, :review) end end
/app/models/user.rb class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable def self.guest find_or_create_by!(email: 'guest@example.com') do |user| user.password = SecureRandom.urlsafe_base64 # user.confirmed_at = Time.now # Confirmable を使用している場合は必要 # 例えば name を入力必須としているならば, user.name = "ゲスト" なども必要 end end has_many :posts, dependent: :destroy has_many :favorites, dependent: :destroy has_many :post_comments, dependent: :destroy #フォローした、されたの関係 has_many :user_relationships, class_name: "UserRelationship", foreign_key: "follower_id", dependent: :destroy has_many :reverse_of_user_relationships, class_name: "UserRelationship", foreign_key: "following_id", dependent: :destroy #一覧画面で使う has_many :followings, through: :user_relationships, source: :following has_many :followers, through: :reverse_of_user_relationships, source: :follower #フォローした時の処理 def follow(user_id) user_relationships.create(following_id: user_id) end #フォローを外す時の処理 def unfollow(user_id) user_relationships.find_by(following_id: user_id).destroy end #フォローしているか判定 def following?(user) followings.include?(user) end end
/app/models/post.rb class Post < ApplicationRecord has_one_attached :image has_many :favorites has_many :comments has_many :post_genres has_many :genres, through: :post_genres has_many :favorites, dependent: :destroy belongs_to :user has_many :post_comments, dependent: :destroy def favorited?(user) favorites.where(user_id: user.id).exists? end end
/db/migrate/20230206055945_create_posts.rb class CreatePosts < ActiveRecord::Migration[6.1] def change create_table :posts do |t| # t.integer :id t.integer :user_id t.string :store_name t.string :post_code t.string :address t.string :regular_holiday t.string :review t.timestamps end end end
/db/schema.rb create_table "posts", id: false, force: :cascade do |t| t.integer "user_id", null: false t.string "store_name", null: false t.string "post_code", null: false t.string "address", null: false t.string "regular_holiday", null: false t.string "review", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end
試したこと
そもそもUnknown primary key for tableのエラーを検索してもほとんどヒットしませんでした。
ヒットしたのは複合主キーを扱っているサイトばかりで自分の場合、複合主キーは設定していないので当てはまりません。今回のエラーについて有用そうな記事が全く見つけられなかったので質問させていただきました。
投稿一覧のページでも同様のエラーが出てます。postをテーブル名にしてしまったのが原因なのかと思いましたがカラム名を変えるのも大変そうなので躊躇いました。
補足情報(FW/ツールのバージョンなど)
Rails 6.1.7.2
回答1件
あなたの回答
tips
プレビュー