前提・実現したいこと
いいね機能を実装したいです。
現在SNS風のアプリケーションを作成しており、そのアプリケーションにいいね機能を追加実装しようとしています。まだ、実装段階ではあるのですが、データベースを一度全てロールバックしたため、
アプリケーション上に投稿を一つ残した方が実装しやすいと判断し、投稿を試みたところ
発生している問題・エラーメッセージ
ActiveRecord::NotNullViolation in PostsController#create Mysql2::Error: Field 'likes_count' doesn't have a default value def create @post = Post.new(post_params) if @post.save <<<該当箇所 redirect_to root_path else render :new
というエラー文が出てしまいました。
該当のソースコード
Ruby
1Postマイグレーションファイル 2 3class CreatePosts < ActiveRecord::Migration[6.0] 4 def change 5 create_table :posts do |t| 6 t.text :rank1, null: false 7 t.text :rank2, null: false 8 t.text :rank3, null: false 9 t.string :title, null: false 10 t.integer :likes_count 11 t.references :user, foreign_key: true 12 13 t.timestamps 14 end 15 end 16end
Ruby
1 2いいねマイグレーションファイル 3 4class CreateLikes < ActiveRecord::Migration[6.0] 5 def change 6 create_table :likes do |t| 7 t.references :user, foreign_key: true 8 t.references :post, foreign_key: true 9 10 t.timestamps 11 end 12 end 13end
Ruby
1routes.rb 2 3Rails.application.routes.draw do 4 devise_for :users 5 root to: 'posts#index' 6 7 resources :users, only: :show 8 9 resources :posts do 10 resources :likes, only: [:create, :destroy] 11 end 12 13end 14 15``` 16 17 18``````Ruby 19 20いいねモデル 21 22class Like < ActiveRecord::Base 23 belongs_to :post, counter_cache: :likes_count 24 belongs_to :user 25 26end 27 28``` 29他のアソシエーションは問題ないことを確認しましたので見やすさを考慮し割愛したいと思います。 30 31 32 33``````Ruby 34postコントローラー 35 36class PostsController < ApplicationController 37 before_action :authenticate_user!, except: [:index, :show] 38 before_action :move_to_index, only: :edit 39 40 def index 41 @posts = Post.includes(:user).order("created_at DESC") 42 end 43 44 def new 45 @post = Post.new 46 end 47 48 def create 49 @post = Post.new(post_params) 50 if @post.save 51 redirect_to root_path 52 else 53 render :new 54 end 55 end 56 57 def show 58 @post = Post.find(params[:id]) 59 end 60 61 def edit 62 @post = Post.find(params[:id]) 63 end 64 65 def update 66 @post = Post.find(params[:id]) 67 if @post.update(post_params) 68 redirect_to root_path 69 else 70 render :edit 71 end 72 end 73 74 def destroy 75 post = Post.find(params[:id]) 76 post.destroy 77 redirect_to root_path 78 end 79 80private 81 82 def post_params 83 params.require(:post).permit(:title, :rank1, :rank2, :rank3, :image, :like_count).merge(user_id: current_user.id) 84 end 85 86 def move_to_index 87 @post = Post.find(params[:id]) 88 unless user_signed_in? && current_user.id == @post.user.id 89 redirect_to action: :index 90 end 91 end 92end 93``` 94 95### 試したこと 96 97マイグレーションファイルのレファレンス型をinteger型にしたこと 98 99https://qiita.com/YuitoSato/items/94913d6a349a530b2ea2 100 101こちらの記事を参考に実装を試みておりました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/09 02:04
2020/12/09 02:20
2020/12/09 03:05
2020/12/09 04:39
2020/12/09 04:43
2020/12/09 04:54