railsでblogアプリを作成しておりdestroy機能をつけようとしているのですが、ブラウザに表示されているDELETEボタンを押して確認ダイアログでOKを押すと次のようなエラーが表示されます。
Routing Error
No route matches [DELETE] "/"
解決方法がおわかりになる方はいらっしゃいますでしょうか。
下記にコードも載せておきます。情報が足りないければご指摘をお願いします。
ご回答お待ちしております。よろしくお願いします。
● 補足情報
OS : macOS Catanlina 10.15.
4
AWS Cloud9
ruby 2.5.1
Rails 5.2.4.2
index.html.erb
1<div class = container> 2 3<% @blogs.each do |blog| %> 4<div class="card my-2 padding-2"> 5 <div class="card body "> 6 <div class="card-title"> 7 <%= link_to blog.title, blog %> 8 </div> 9 <div class="card-text"> 10 <%= blog.body.truncate(60) %> 11 </div> 12 </div> 13 <div class="card-footer text-right"> 14 <%= blog.updated_at.strftime("%Y-%m-%d") %> 15 <%= blog.user_name %> 16 <%= link_to 'Edit', edit_blog_path(blog) %> 17 <%= link_to 'Destroy', blog_path(blog), method: :delete, data: { confirm: 'Are you sure?' } %> 18 </div> 19</div> 20 21 <% end %>
blogs_controller.rb
1class BlogsController < ApplicationController 2 before_action :move_to_index, except: :index 3 # GET /blogs 4 # GET /blogs.json 5 def index 6 @blogs = Blog.all 7 end 8 9 # GET /blogs/1 10 # GET /blogs/1.json 11 def show 12 @blog = Blog.find(params[:id]) 13 end 14 15 # GET /blogs/new 16 def new 17 @blog = Blog.new 18 end 19 20 # GET /blogs/1/edit 21 def edit 22 @blog = Blog.find(params[:id]) 23 end 24 25 # POST /blogs 26 # POST /blogs.json 27 def create 28 @blog = Blog.new(blog_params) 29 30 respond_to do |format| 31 if @blog.save 32 format.html { redirect_to @blog, notice: 'Blog was successfully created.' } 33 format.json { render :show, status: :created, location: @blog } 34 else 35 format.html { render :new } 36 format.json { render json: @blog.errors, status: :unprocessable_entity } 37 end 38 end 39 end 40 41 # PATCH/PUT /blogs/1 42 # PATCH/PUT /blogs/1.json 43 def update 44 @blog = Blog.find(params[:id]) 45 46 if @blog.update(blog_params) 47 redirect_to blogs_path 48 else 49 render 'edit' 50 end 51 end 52 53 # DELETE /blogs/1 54 # DELETE /blogs/1.json 55 def destroy 56 blog = Blog.find(params[:id]) 57 if blog.user_id == current_user.id 58 blog.destroy #destroyメソッドを使用し対象のツイートを削除する。 59 end 60 end 61 62 private 63 # Use callbacks to share common setup or constraints between actions. 64 def set_blog 65 @blog = Blog.find(params[:id]) 66 end 67 68 # Only allow a list of trusted parameters through. 69 def blog_params 70 params.permit(:title, :body, :user_name, :user_id) 71 end 72 73 def move_to_index 74 redirect_to action: :index unless user_signed_in? 75 end 76 77end
routes.rb
1Rails.application.routes.draw do 2 devise_for :users 3 root "blogs#index" 4 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 5 resources :blogs do 6 resources :comments 7 end 8 9 delete "blogs/:id" => "blogs#destroy" 10 11end
私の知識ではこれでうまく行かないのがおかしい、、、
念の為 rails routes の結果も載せてください
ご確認ありがとうございます!数時間トライしていますが原因はまだ掴めず、です。。。
rails routesはこちらです。宜しくお願いします。
```rails routes
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
user_registration PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
POST /users(.:format) devise/registrations#create
root GET / blogs#index
blog_comments GET /blogs/:blog_id/comments(.:format) comments#index
POST /blogs/:blog_id/comments(.:format) comments#create
new_blog_comment GET /blogs/:blog_id/comments/new(.:format) comments#new
edit_blog_comment GET /blogs/:blog_id/comments/:id/edit(.:format) comments#edit
blog_comment GET /blogs/:blog_id/comments/:id(.:format) comments#show
PATCH /blogs/:blog_id/comments/:id(.:format) comments#update
PUT /blogs/:blog_id/comments/:id(.:format) comments#update
DELETE /blogs/:blog_id/comments/:id(.:format) comments#destroy
blogs GET /blogs(.:format) blogs#index
POST /blogs(.:format) blogs#create
new_blog GET /blogs/new(.:format) blogs#new
edit_blog GET /blogs/:id/edit(.:format) blogs#edit
blog GET /blogs/:id(.:format) blogs#show
PATCH /blogs/:id(.:format) blogs#update
PUT /blogs/:id(.:format) blogs#update
DELETE /blogs/:id(.:format) blogs#destroy
DELETE /blogs/:id(.:format) blogs#destroy
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
```
コメントだとベタになって読みにくいんで、質問欄に<code>で書いて欲しかった
routesは問題ないように見えますね。
すると link_to 'Destroy', blog_path(blog), method: :delete がなぜ "/"へのrouteを作ろうとしているのか、、、
ですが
すみません、力不足です
質問欄にcodeで追加するべきだったのですね。次回から気をつけます。
ご検証いただき誠にありがとうございます。
解決方法に載せれるよう調査を続けてみます。
あなたの回答
tips
プレビュー