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

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

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

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

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

Q&A

解決済

1回答

1694閲覧

Couldn't find Board without an ID お気に入り登録を実装したいです

mmmaaarrrkkk000

総合スコア16

Ruby on Rails 5

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

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/06/25 14:57

質問内容・実現したいこと

掲示版一覧からお気にりボタン押した時にエラーになりました。
お気に入り登録ができるようにしたいです。

ご教授いただきたいです。
よろしくお願いします。

現状発生している問題・エラーメッセージ

Boardモデルのidが見つからないよというエラー

ActiveRecord::RecordNotFound in BookmarksController#create Couldn't find Board without an ID

https://i.gyazo.com/ad245b974aae5de462b19982ee0197cc.png

ruby

1Request 2Parameters: 3 4{"_method"=>"post", "authenticity_token"=>"GjpbjXUEzOUpnDyRLQbgq4sWrambTE8Va/CxpV2KLTAoOl7hqdtWb+wj49thDvnaFexpXbDBDEA/bKO7Am5Wqg==", "board_id"=>"4"} 5Toggle

該当のソースコード

< bookmark_controller.rb >

ruby

1class BookmarksController < ApplicationController 2 3 def create 4 board = Board.find(params[:id]) 5 current_user.bookmark(board) 6 redirect_back fallback_location: root_path, success: t('.bookmark') 7 end 8 9 def destroy 10 board = current_user.bookmarks.find(params[id]) 11 board.unbookmark(board) 12 redirect_back fallback_location: root_path, success: t('.unbookmark') 13 end 14end

< _board.html.erb >

ruby

1<div class='mr10 float-right'> 2 <% if current_user.own?(board) %> 3 <%= render 'card_menus', board: board %> 4 <% else %> 5 <%= render 'bookmarks/bookmark_button', board: board %> 6 <% end %> 7</div>

< _bookmark_button.html.erb >

ruby

1<% if current_user.bookmark?(board) %> 2 <%= render 'bookmarks/unbookmark', board: board, class: 'float-right' %> 3<% else %> 4 <%= render 'bookmarks/bookmark', board: board %> 5<% end %>

< _bookmark.html.erb >

ruby

1<%= link_to board_bookmarks_path(board_id: board.id), id: "js-bookmark-buttun-for-board-#{board.id}", class: 'float-rigth', method: :post do %> 2 <%= icon 'far', 'star' %> 3<% end %>

< _unbookmark.html.erb >

ruby

1<%= link_to, board_bookmark_path(currnt_user.bookmarks.find_by(board_id: board.id)), id: "js-bookmark-buttun-for-board-#{board.id}", class: 'float-right', method: :delete do %> 2 <%= icon 'fas', 'star' %> 3<% end %>

< routes.rb >

ruby

1Rails.application.routes.draw do 2 root to: 'static_pages#top' 3 resources :users, only: %i[new create] 4 resources :boards, shallow: true do 5 resources :comments, only: %i[create destroy] 6 resources :bookmarks, only: %i[create destroy] 7 collection do 8 get :bookmarks 9 end 10 end 11 12 get 'login', to: 'user_sessions#new' 13 post 'login', to: 'user_sessions#create' 14 delete 'logout', to: 'user_sessions#destroy' 15end

ターミナルログ

ActiveRecord::RecordNotFound (Couldn't find Board without an ID): app/controllers/bookmarks_controller.rb:4:in `create' Started PUT "/__web_console/repl_sessions/32ca51ff77e5220055b5364cb19f554a" for ::1 at 2021-06-25 22:18:34 +0900 Started PUT "/__web_console/repl_sessions/32ca51ff77e5220055b5364cb19f554a" for ::1 at 2021-06-25 22:18:37 +0900 Board Load (0.8ms) SELECT "boards".* FROM "boards" LIMIT ? [["LIMIT", 11]] ↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98

エラーから考えられる原因

Boardモデルのidが見つからないよというエラーなので、どこかでidが渡せて無いからでしょうか。。

試したこと

ruby

1# ネストさせる 2resources :boards, shallow: true do 3 resources :comments, only: %i[create destroy] 4 resources :bookmarks, only: %i[create destroy] 5 collection do 6 get :bookmarks 7 end 8 end 9 10# ネストさせない 11resources :users, only: %i[new create] 12 resources :boards do 13 resources :comments, only: %i[create update destroy], shallow: true 14 collection do 15 get :bookmarks 16 end 17 end 18 resources :bookmarks, only: %i[create destroy] 19

参考にしたURL

Couldn't find Item with 'id'= を解決する - Qiita

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Parameters: をみると "board_id"=>"4" つまりidではないです。
board = Board.find(params[:board_id]) に。

投稿2021/06/25 23:22

winterboum

総合スコア23401

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

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

mmmaaarrrkkk000

2021/06/26 00:32

回答していただきありがとうございます! `board_id` と `user_id` が二つ揃って お気に入り登録(bookmark_id)ができる。 なので、`board_id` は、確認できるけど `user_id` が確認できないからお気に入りできないとういう事なんでしょうか。 調べてみます。
winterboum

2021/06/26 01:06

そこまで到達してません createの入口 board = Board.find(params[:id]) でのエラーです
mmmaaarrrkkk000

2021/06/26 07:40

回答ありがとうございます board = Board.find(params[:borad_id]) で引っ張ってきて試してみます
winterboum

2021/06/26 08:47

すると次のエラーが、もしくは BookMarkができないか、 という現象になるかな
mmmaaarrrkkk000

2021/06/28 10:49

返答が多くなりました。 回答いただきありがとうございます! params で board_id を引っ張ってきて、モデルで定義したbookmarkメソッドを使い無事、お気に入りを実装できました。 あと、createアクションに送るpathが誤字していたので修正しました。
mmmaaarrrkkk000

2021/06/28 11:07

いまいち、回答いただいたところが理解ができていいないのですが、、 Parameters: をみると "board_id"=>"4" つまりidではないです。 board = Board.find(params[:board_id]) に。 ``` <%= link_to board_bookmarks_path(board_id: board.id), id: "js-bookmark-buttun-for-board-#{board.id}", class: 'float-rigth', method: :post do %> ``` の `link_to board_bookmarks_path(board_id: board.id), method: :post` で board_id は、Parameters で確認する限りcreateアクションに送ることはできているけど bookmarks_contorollerのcreateアクションの paramsの引数では、board_idを指定していないからお気に入りした掲示版のidが見つからないよ!というエラーが発生したという認識で間違いないでしょうか? 長文すみません。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問