🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Ruby on Rails

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

Q&A

1回答

1367閲覧

『Rails』ログイン後、投稿した記事の'削除'を実行した際に、ルーティングエラー(DELETEではなくGET)が発生。 記事を削除したい。

narsyaki

総合スコア4

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/10/15 13:00

編集2019/10/15 13:06

前提・実現したいこと

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

8zca

2019/10/17 11:11

app/views/layouts/application.html.erb でapplication.jsは読み込まれているでしょうか? また、コードは「コードの挿入」で書いてもらった方が見やすくなります。
guest

回答1

0

view

1<%= link_to '削除', "/#{blog.id}", method: :delete %>

上記のlink_toメソッドのオプションに指定している method についてですが
javascriptが無効になっている場合、リクエストはGETで実行されます。
ブラウザのjavascriptが有効になっているか、
またrailsでjavascriptを読み込んでいるかを確認してみてください。

*rails5.2.3のjavascript読み込み箇所(app/views/layouts/application.html.erb)

<html> <head> ~~省略~~ <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> ~~省略~~ <head> <html>

link_toのオプションなどについては以下の資料を確認してみてください。
*link_toメソッドのリファレンス
https://api.rubyonrails.org/v5.0/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

投稿2019/10/17 14:16

Nuu

総合スコア55

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問