実現したいこと
Ruby on railsでいいね機能をつけるためにコードを記述したのですが、routing errorが出てうまくいきません。いいねが0の状態で、いいねを押すとこの画面が出ました。このエラーを解決したいです。
発生している問題・エラーメッセージ
error画面
Routing Error No route matches [GET] "/tweets/4/likes"
コマンドプロンプト rails routes実行画面
tweet_likes POST /tweets/:tweet_id/likes(.:format) likes#create tweet_like DELETE /tweets/:tweet_id/likes/:id(.:format) likes#destroy tweets GET /tweets(.:format) tweets#index POST /tweets(.:format) tweets#create new_tweet GET /tweets/new(.:format) tweets#new edit_tweet GET /tweets/:id/edit(.:format) tweets#edit tweet GET /tweets/:id(.:format) tweets#show PATCH /tweets/:id(.:format) tweets#update PUT /tweets/:id(.:format) tweets#update DELETE /tweets/:id(.:format) tweets#destroy
routes.rb画面
Rails.application.routes.draw do devise_for :users # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html get 'hello/index' => 'hello#index' get 'hello/link' => 'hello#link' resources :tweets do resources :likes, only: [:create, :destroy] end end
links_controller画面
class LikesController < ApplicationController def create like = current_user.likes.create(tweet_id: params[:tweet_id]) redirect_back(fallback_location: root_path) end def destroy like = Like.find_by(tweet_id: params[:tweet_id], user_id: current_user.id) like.destroy redirect_back(fallback_location: root_path) end end
index.html画面
<%= stylesheet_link_tag 'index', :media => "all" %> <%= page_entries_info @tweets %> <div class="tweets-container"> <h1>Geektwitter</h1> <%= button_to 'ログアウト', destroy_user_session_path, method: :delete %> <h3>Tweet一覧</h3> <h3>投稿を検索</h3> <%= form_tag({controller:"tweets",action:"index"}, method: :get) do %> <%= text_field_tag :search %> <%= submit_tag '検索する' %> <% end %> <% @tweets.each do |t| %> <div class="tweet"> <%= t.user.email %> <div class="main-box"> <div class="left-container"><%= t.body %></div> <%= image_tag t.image_url, size: "250x200" if t.image? %> <% if user_signed_in? %> <% if current_user.already_liked?(t) %> <%= link_to tweet_like_path(id: t.id, tweet_id: t.id), method: :delete do %> <i class="fas fa-heart"></i><%= t.likes.count %> <% end %> <% else %> <%= link_to tweet_likes_path(id: t.id, tweet_id: t.id), method: :post do %> <i class="far fa-heart"></i><%= t.likes.count %> <% end %> <% end %> <% else %> <i class="far fa-heart"></i><%= t.likes.count %> <% end %> <div class="right-container"> <%= link_to "詳細", tweet_path(t.id) %> <%= link_to "編集", edit_tweet_path(t.id) %> <%= link_to "削除", tweet_path(t.id), method: :delete %> </div> </div> <p class="time"><%= t.created_at %></p> </div> <% end %> <%= paginate @tweets %> </div>
試したこと
routes.rbの記述、createアクションのpathの確認はしました。
エラー画面でpostメゾットではなくgetメゾットになっていて混乱しています。
プログラミングを始めたばかりで、勉強不足なのは重々承知していますが、答えて頂けると幸いです。