🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1151閲覧

いいね機能実装中の Mysql2::Error: Field 'likes_count' doesn't have a default value

Pro01x19

総合スコア17

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/12/09 00:08

前提・実現したいこと

いいね機能を実装したいです。

現在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こちらの記事を参考に実装を試みておりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

定義上、not nullのようなので、例えば固定値で0を入れてみてはどうでしょう。

投稿2020/12/09 01:57

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Pro01x19

2020/12/09 02:04

回答ありがとうございます。 初学者のため的外れなことを言っていたらすいません。 counter_cacheを利用して初期値を0に設定したつもりだったのですが、 今後どのようなアプローチをしたら固定値0を入れることが可能か教えていただけないでしょうか?
Pro01x19

2020/12/09 03:05

ありがとうございます! 前回のエラーに引き続きご回答いただき助けられてばかりでなんとお礼したらいいか
m.ts10806

2020/12/09 04:39

エラーを読みましょう。
Pro01x19

2020/12/09 04:43

今回、エラーでLike_countに値が入っていないことは読み取れたのですが、どのようにしたらこれが改善されるか。が考えきれずに質問してしまいました。 エラーを読んで経験を積むしかないですね!
m.ts10806

2020/12/09 04:54

doesn't have a default value だけで検索して提示したような対策が出てきたので、 読むだけではだめかと。 大抵のことは誰かが当たってる問題です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問