質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

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

Q&A

解決済

1回答

1073閲覧

削除機能が実装できない

aki_aki

総合スコア3

Ruby on Rails

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

0グッド

0クリップ

投稿2021/12/20 03:42

前提・実現したいこと

一覧ページにあるゴミ箱アイコンや詳細ページにある削除ボタンを押して削除機能を実装したいのですが削除されません。
一覧ページある削除ボタンを押すと詳細ページに飛んでしまいます。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ruby

1works_controller.rb 2class WorksController < ApplicationController 3 before_action :set_work, only: [:edit, :show, :update, :destroy] 4 5 def index 6 @works = Work.all.order('created_at DESC') 7 end 8 9 def new 10 @work = Work.new 11 end 12 13 def create 14 @work = Work.new(work_params) 15 if @work.save 16 redirect_to works_path 17 else 18 render :new 19 end 20 end 21 22 def show 23 end 24 25 def destroy 26 @work.destroy 27 redirect_to works_path 28 end 29 30 def edit 31 end 32 33 def update 34 if @work.update(work_params) 35 redirect_to works_path 36 else 37 render :edit 38 end 39 end 40 41 private 42 43 def work_params 44 params.permit(:cliant_name, :job_description, :calendar, :work_place, :price).merge(user_id: current_user.id) 45 end 46 47 def set_work 48 @work = Work.find(params[:id]) 49 end 50end

ruby

1show.html.erb 2<div class="wrapper"> 3 <div class="side-bar"> 4 <%= render "side_bar" %> 5 </div> 6 <div class="chat"> 7 <div class="main"> 8 <div class="page-header"> 9 <h1>詳細</h1> 10 </div> 11 <div class="panel panel-default"> 12 <div class="panel-heading"> 13 <h1 class="panel-title">顧客</h1> 14 </div> 15 <div class="panel-body"> 16 <h2><%= @work.cliant_name %></h2> 17 </div> 18 <div class="panel-heading"> 19 <h1 class="panel-title">仕事内容</h1> 20 </div> 21 <div class="panel-body"> 22 <h2><%= @work.job_description %></h2> 23 </div> 24 <div class="panel-heading"> 25 <h1 class="panel-title">日付</h1> 26 </div> 27 <div class="panel-body"> 28 <h2><%= @work.calendar %></h2> 29 </div> 30 <div class="panel-heading"> 31 <h1 class="panel-title">場所</h1> 32 </div> 33 <div class="panel-body"> 34 <h2><%= @work.work_place %></h2> 35 </div> 36 <div class="panel-heading"> 37 <h1 class="panel-title">金額</h1> 38 </div> 39 <div class="panel-body"> 40 <h2><%= @work.price %></h2> 41 </div> 42 </div> 43 <button type="button" class="btn btn-secondary btn-lg"> 44 <%= link_to "削除", work_path(@work.id), method: :delete, class:"back" %> 45 </button> 46 <button type="button" class="btn btn-secondary btn-lg"> 47 <%= link_to "戻る", works_path, class: "back" %> 48 </button> 49 </div> 50 </div> 51</div> 52 53

ruby

1_work.html.erb 2<div class="message"> 3 <div class="upper-message"> 4 <div class="message-user"> 5 <div class="col-sm-4"> 6 <div class="panel panel-success"> 7 <div class="panel-heading"><%= link_to work.calendar, work_path(work.id) %></div> 8 <div class="panel-body"> 9 <%= work.cliant_name %> 10 <%= link_to edit_work_path(work.id) do %> 11 <span class="fas fa-edit"></span> 12 <% end %> 13 <%= link_to work_path(work.id), method: :delete do %> 14 <span class="fas fa-trash-alt"></span> 15 <% end %> 16 </div> 17 </div> 18 </div> 19 </div> 20 </div> 21</div>

ruby

1rails routes 2 Prefix Verb URI Pattern Controller#Action 3 new_user_session GET /users/sign_in(.:format) devise/sessions#new 4 user_session POST /users/sign_in(.:format) devise/sessions#create 5 destroy_user_session GET /users/sign_out(.:format) devise/sessions#destroy 6 new_user_password GET /users/password/new(.:format) devise/passwords#new 7 edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 8 user_password PATCH /users/password(.:format) devise/passwords#update 9 PUT /users/password(.:format) devise/passwords#update 10 POST /users/password(.:format) devise/passwords#create 11 cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel 12 new_user_registration GET /users/sign_up(.:format) devise/registrations#new 13 edit_user_registration GET /users/edit(.:format) devise/registrations#edit 14 user_registration PATCH /users(.:format) devise/registrations#update 15 PUT /users(.:format) devise/registrations#update 16 DELETE /users(.:format) devise/registrations#destroy 17 POST /users(.:format) devise/registrations#create 18 root GET / users#index 19 users GET /users(.:format) users#index 20 edit_user GET /users/:id/edit(.:format) users#edit 21 user PATCH /users/:id(.:format) users#update 22 PUT /users/:id(.:format) users#update 23 works GET /works(.:format) works#index 24 POST /works(.:format) works#create 25 new_work GET /works/new(.:format) works#new 26 edit_work GET /works/:id/edit(.:format) works#edit 27 work GET /works/:id(.:format) works#show 28 PATCH /works/:id(.:format) works#update 29 PUT /works/:id(.:format) works#update 30 DELETE /works/:id(.:format) works#destroy

ruby

1routes.rb 2Rails.application.routes.draw do 3 devise_for :users 4 root to: "users#index" 5 resources :users, only: [:index,:edit, :update] 6 resources :works 7end 8

試したこと

コントローラーのdestroyアクションやpathを確認してみたのですが、原因がわかりません。

補足情報(FW/ツールのバージョンなど)

ruby '2.6.5'
rails 6.0.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

buttonタグの中にlink_toを入れても無意味です。link_toはaタグを作るものなので。
開発コンソールなどで、どんな形のhtmlが生成されているか確認した方がいいですよ。

投稿2021/12/20 08:41

FKM

総合スコア3647

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

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

aki_aki

2021/12/20 10:03

ありがとうございま。 修正いたしましたが、まだ削除ボタンを押しても詳細画面に飛んでしまいます。
FKM

2021/12/21 00:40

どのように修正をかけたのでしょうか。また、それによって生成されたhtmlを開発コンソールで確認していますか?
aki_aki

2021/12/21 00:53

buttonタグを無くしました。 <%= link_to "削除", work_path(@work.id), method: :delete, class:"btn btn-secondary btn-lg" %> <%= link_to "戻る", works_path, class:"btn btn-secondary btn-lg" %> 開発コンソールを確認したところ以下のようになっています。 <a class="btn btn-secondary btn-lg" rel="nofollow" data-method="delete" href="/works/5">削除</a> <a class="btn btn-secondary btn-lg" href="/works">戻る</a> ちなみにですが、今、他のテーブルを作成中なのですが、こちらでも削除ボタンを押すと詳細ページに飛んでしまいます。
FKM

2021/12/21 01:50 編集

削除と戻るが同じリンク先になっているようですが、edit_work_pathが設定しているリンク先はどうなっていますか?
aki_aki

2021/12/21 01:57

edit_work_pathは正常に編集ページに遷移します。 link_toをbutton_toに変更したら削除することができました。 しかし、ビューの見た目がだいぶ変わってしまいます。 linl_toのままで実装する方法は難しいですかね?
FKM

2021/12/21 02:09 編集

リンク先のパスをコントローラ/メソッドにすればいけるはずですけどね。現状、戻ると同じリンク先になっているから、methodを指定したところで、リンク先のパスだと該当メソッドが存在しないので、何もできなかっただけですので。編集処理させるなら、コントローラとメソッドにリンクさせないといけません。 現に、自分の実装したCRUDシステムの場合はlink_toで制御させてます。ヘルパーも使っているので、少し質問主と書き方が違いますが。
aki_aki

2021/12/21 03:15

知識不足ですいません。 この、『編集処理させるなら、コントローラとメソッドにリンクさせないといけません。』というのはどういうことでしょうか。
aki_aki

2021/12/21 05:31

色々試してみたのですがダメでした。
aki_aki

2021/12/21 10:59

deleteメソッドが機能していない可能性はあるでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問