前提・実現したいこと
railsで掲示板サービスを制作しています。
アカウント登録したユーザーがトピックスを作ったり、参加したりして、投稿フォームに記述した物をトピックに表示するようにしたいです。
今回のエラーはトピックを作成しトピックのトップページに移動し投稿フォーム画面へ移動しテキストを入力して投稿ボタンを押すとエラーが出てきます。
発生している問題・エラーメッセージ
ActiveRecord::NotNullViolation in PostsController#create SQLite3::ConstraintException: NOT NULL constraint failed: posts.topic_id
該当のソースコード
class PostsController < ApplicationController before_action :authenticate_user! before_action :find_post,only: [:show, :edit, :update, :destroy] def index @post = Post.all end def show @topic = Topic.find(params[:id]) @posts = Post.where(topic_id: params[:id]) end def new return redirect_to new_profile_path,alert: "プロフィールを登録してください" if current_user.profile.blank? @post = Post.new end def create @post = Post.new(post_params) @post.user = current_user if @post.save redirect_to root_path, notice: "投稿に成功しました" else render :new end end def update if @post.update(post_params) redirect_to root_path, notice: "投稿を更新しました" else render :edit end end def destroy if @post.destroy redirect_to root_path, notice: "投稿を削除しました" else redirect_to root_path, alert: "投稿を削除できませんでした" end end private def post_params params.require(:post).permit( :content ) end def find_post @post = Post.find(params[:id]) end end
class TopicsController < ApplicationController def index @topics = Topic.all @newTopic = Topic.new end def show @topic = Topic.find(params[:id]) @posts = Post.where(topic_id: params[:id]) end def create @topic = Topic.new(params[:topic].permit(:title)) @topic.save redirect_to topics_index_path end def delete @topic = Topic.find(params[:id]) @topic.destroy redirect_to topics_index_path end end
create_table "active_storage_attachments", force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false t.integer "record_id", null: false t.integer "blob_id", null: false t.datetime "created_at", null: false t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true end create_table "active_storage_blobs", force: :cascade do |t| t.string "key", null: false t.string "filename", null: false t.string "content_type" t.text "metadata" t.bigint "byte_size", null: false t.string "checksum", null: false t.datetime "created_at", null: false t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true end create_table "group_users", force: :cascade do |t| t.integer "group_id" t.integer "user_id" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["group_id"], name: "index_group_users_on_group_id" t.index ["user_id"], name: "index_group_users_on_user_id" end create_table "groups", force: :cascade do |t| t.string "name", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["name"], name: "index_groups_on_name", unique: true end create_table "posts", force: :cascade do |t| t.text "content" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "user_id" t.integer "topic_id", null: false t.index ["topic_id"], name: "index_posts_on_topic_id" t.index ["user_id"], name: "index_posts_on_user_id" end create_table "profiles", force: :cascade do |t| t.integer "user_id", null: false t.string "name" t.text "career" t.string "image" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["user_id"], name: "index_profiles_on_user_id" end create_table "topics", force: :cascade do |t| t.string "title" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.integer "topic_id" end create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "group_users", "groups" add_foreign_key "group_users", "users" add_foreign_key "posts", "topics" add_foreign_key "posts", "users" add_foreign_key "profiles", "users" end
試したこと
このエラーについて検索しましたが類似の記事も少なくわかりません。
勉強を始めてから1週間なので説明が下手くそで分かり難いとは思いますが、どうかよろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。