前提・実現したいこと
Railsで初めて簡単なブログを作成しています。
ログイン後、投稿した記事を削除できるようにしたい。
発生している問題・エラーメッセージ
ログイン後、投稿した記事の'削除'を実行した際に、ルーティングエラー(DELETEではなくGET)が発生。
Routing Error No route matches [GET] "/4"
該当のソースコード
Rails
■routes.rb
Rails.application.routes.draw do
devise_for :users
root 'blogs#index'
get '/new' => 'blogs#new'
post '/complete' => 'blogs#create'
get '/:id/edit' => 'blogs#edit'
patch '/:id' => 'blogs#update'
delete '/:id' => 'blogs#destroy'
end
■index.html.erb
<ul class="list_blog"> <% @blogs.each do |blog| %> <li> <h2><%= blog.title %></h2> <% if blog.image != "" %> <p><img src="<%= blog.image %>"></p> <% end %> <p><%= blog.content %></p> <p><%= blog.created_at %></p> </li> </ul> <% if user_signed_in? %>
<ul>
<li><%= link_to '編集', "/#{blog.id}/edit", method: :get %></li>
<li><%= link_to '削除', "/#{blog.id}", method: :delete %></li>
</ul>
<% end %>
<% end %>
■blogs_controller.rb
class BlogsController < ApplicationController
before_action :move_to_index, except: :index
def index
@blogs = Blog.all.order("id DESC")
end
def new
end
def create
@blog = Blog.new(blog_params)
@blog.user = current_user
@blog.title = params[:title]
@blog.image = params[:image]
@blog.content = params[:content]
@blog.save(blog_params)
end
def edit
@blog = Blog.find(params[:id])
end
def update
blog = Blog.find(params[:id])
blog.update(blog_params) if blog.user_id == current_user.id
end
def destroy
blog = Blog.find(params[:id])
blog.destroy(blog_params) if blog.user_id == current_user.id
end
private
def blog_params
params.permit(:title, :image, :content)
end
def move_to_index
redirect_to action: :index unless user_signed_in?
end
end
試したこと
1.rake routes
2.binding.pryで'削除'を実行した際に、GETになっていることを確認。
3.application.jsの確認
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .
補足情報(FW/ツールのバージョンなど)
Rails 5.2.3
ここにより詳細な情報を記載してください。