質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

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

Ruby

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

Q&A

解決済

2回答

1343閲覧

Validation failed: Boards must exist, Users must exist というエラーが出る

Shmupeiii

総合スコア105

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2022/04/21 14:04

編集2022/04/22 04:42

https://rails-docker-portfolio2.herokuapp.com
gtihub : https://github.com/takoyan33/railsdock4

一点エラーに関する質問ですが、今
https://qiita.com/nojinoji/items/2c66499848d882c31ffa 
を参考にしていいね機能を実装しています。

posts部分は、boardに置き換えて作っているのですが、
全部コードを貼り付けた後に、実際にいいねボタンを押した後写真のエラーが出ました。
createと書くと、エラーは起きないですが、何も変化しない感じです。
よろしくお願いします。

イメージ説明

イメージ説明

#エラーメッセージ ActiveRecord::RecordInvalid in LikesController#create Validation failed: Boards must exist, Users must exist Extracted source (around line #3): class LikesController < ApplicationController def create @like = @current_user.likes.create!(board_id: params[:board_id]) redirect_back(fallback_location: root_path) end Rails.root: /app

Ruby

1#boards/show.html.erb 2<div class="d-flex align-items-center mt-4 mb-4"> 3 <div class="ml-auto boards__linkBox"> 4 <%= link_to '一覧', boards_path, class: 'btn btn-outline-dark' %> 5 <%= link_to '編集', edit_board_path(@board), class: 'btn btn-outline-dark' %> 6 </div> 7</div>

Ruby

1<% if flash[:notice] %> 2 <div class="alert alert-primary"><%= flash[:notice] %></div> 3<% end %> 4<%= render @board %> 5 6<% if @current_user %> 7<div class="p-comment__list"> 8 <div class="p-comment__listTitle">コメント <%= @board.comments.count %>件</div> 9 <%= render @board.comments %> 10</div> 11<%= render partial: 'comments/form', locals: { comment: @comment } %> 12<% else %> 13<div class="p-comment__list"> 14 <div class="p-comment__listTitle">コメントはログインするとできるようになります。</div> 15</div> 16<% end %>

Ruby

1<h3>いいね件数: <%= @board.likes.count %></h3> 2<% if @current_user.already_liked?(@board) %> 3 <%= button_to 'いいねを取り消す', board_like_path(@board), method: :delete %> 4<% else %> 5 <%= button_to 'いいね', board_likes_path(@board) %> 6<% end %> 7<h2>いいねしたユーザー</h2> 8<%# @board.liked_users.each do |user| %> 9 <li><%#= user.email %></li> 10<%# end %> 11likes_controller.rb 12class LikesController < ApplicationController 13 def create 14 @like = @current_user.likes.create!(board_id: params[:board_id]) 15 redirect_back(fallback_location: root_path) 16 end 17 18 def destroy 19 @like = Like.find_by(board_id: params[:board_id], user_id: @current_user.id) 20 @like.destroy 21 redirect_back(fallback_location: root_path) 22 end 23end 24board.rb

Ruby

1#Board.rb 2class Board < ApplicationRecord 3 has_many :comments, dependent: :delete_all 4 has_many :board_tag_relations, dependent: :delete_all 5 has_many :tags, through: :board_tag_relations 6 has_one_attached :image 7 belongs_to :user , optional: true 8 has_many :likes, dependent: :destroy 9 has_many :liked_users, through: :likes, source: :user 10 11 # validates :name, length: { maximum: 10 } 12 validates :title, presence: true, length: { maximum: 30 } 13 validates :body, presence: true, length: { maximum: 1000 } 14 15 scope :created_today, -> { where(created_at: Time.zone.now.all_day) } # 今日 16 scope :created_last_month, -> { where(created_at: Time.zone.now.prev_month.all_day) } # 1ヶ月前の投稿 17 scope :created_month, -> { where(created_at: Time.zone.now.all_month) } # 今月の投稿 18end

Ruby

1#like.rb 2class Like < ApplicationRecord 3 belongs_to :boards 4 belongs_to :users 5 validates_uniqueness_of :board_id, scope: :user_id 6end

Ruby

1user.rb 2class User < ApplicationRecord 3 has_secure_password 4 has_many :boards, dependent: :destroy 5 has_many :comments, dependent: :destroy 6 has_many :likes, dependent: :destroy 7 has_many :liked_boards, through: :likes, source: :post 8 9 def already_liked?(board) 10 self.likes.exists?(board_id: board.id) 11 end 12 13 validates :name, 14 presence: true, 15 uniqueness: true, 16 length: {maximum:16} 17 validates :password, 18 length: {minimum: 8 } 19end
boards_controller.rb def show @comment = Comment.new(board_id: @board.id) @user = User.find(@board.user_id) @like = Like.new #これのみ追加 end

RUby

1routes.rb 2 3resources :boards do 4resources :likes, only: [:create, :destroy] #これのみ追加 5end

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

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

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

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

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

winterboum

2022/04/21 22:12

エラーメッセージをtextで貼ってください。画像だと潰れて読めない。検索もできないし。
Shmupeiii

2022/04/22 04:43

承知しました。textで貼りました。
guest

回答2

0

無事解決することができました。ありがとうございます。

投稿2022/04/22 07:16

Shmupeiii

総合スコア105

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

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

0

ベストアンサー

ああ、

class Like < ApplicationRecord belongs_to :boards belongs_to :users

これを単数形に直してください

投稿2022/04/22 05:44

winterboum

総合スコア23329

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問