ここのテスト課題は基本的に以前やったブックマークの課題を参考にして 取り組んだ。
ただ、以下のエラーで非常に悩んだ。
ActiveRecord::RecordNotFound:
Couldn't find Post with 'id'=likes
#訳 idがlikesのPostは見つかりません。
以下の質問のリンクでActiveRecord::RecordNotFoundについて調べたら https://teratail.com/questions/306876
「params[:id] はパスからやってきます。find は ID を検索します。IDが見つからないと
ActiveRecord::RecordNotFound になります。なので Post.find(nil) はエラーになります。
(IDがnilのレコードはない)
ここでパスが通っていないか、ルーティングにミスがあるのではないかと考えた。
routes.rb(一部抜粋)
resources :posts do
resources :likes, only: %i[create destroy]
end
Rspecのllikes_spec.rbにvisit 'posts/likes’という記載があった。
この/posts/likesのURLを作るために以下のようにする。
routes.rb(変更後)
resources :posts do
resources :likes, only: %i[create destroy]
get 'likes', on: :collection(追記)
end
もしくは
resources :posts do
resources :likes, only: %i[create destroy]
collection do (以下、3文を追記)
get :likes
end
#collection は全部のデータに対するアクションで使用する。
end