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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

1回答

4799閲覧

destroy、削除機能とそのボタンの作成の仕方がわからない。初心者

-maeji-

総合スコア39

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

2グッド

1クリップ

投稿2018/12/18 04:08

編集2018/12/29 04:01

初学者です。
シンプルなアプリを作成する課題にとり組んでいます。CRUDの機能を実装したいと思っているのですが、その一つであるdestroy(削除機能)の実装の仕方がわからず進めることができずにいます。

今回作成するのはこのようなアプリで、削除機能を実装したいのは、一覧画面(index)と詳細画面(show)です。
以下がお手本とされるものです。

イメージ説明
イメージ説明


そして以下が私の現在の進捗状況となります。(一覧画面indexのみ。詳細画面showアクションはまだ編集していません)


イメージ説明

エディタでは以下のように編集してみました。

index.html.erb

index.html.erb

1 2 3<h1>タスク一覧</h1> 4<ul> 5 6 <% @tasks.each do |task| %> 7 <li> 8 title: <%= task.title %> 9 </li> 10 11 <li> 12 content: <%= task.content %> 13 </li> 14 15 <%= link_to "delete", task, method: :delete, 16 data: { confirm: "You sure?" } %> 17 18 19 20 <% end %> 21 22 23 24</ul>

task_controller.rb

task_controller

1 2class TasksController < ApplicationController 3 def index 4 @tasks = Task.all 5 end 6 7 def new 8 @task = Task.new 9 end 10 11 def edit 12 @task = Task.find(params[:id]) 13 end 14 15 16 def create 17 @task = Task.new(tasks_param) 18 #@task = Task.new(title: params[:task][:title], content: params[:task][:content]) 19 20 if @task.save 21 redirect_to tasks_url 22 else 23 render :new 24 end 25 end 26 27 28 def update 29 30 @task = Task.find(params[:id]) 31 if @task.update(tasks_param) 32 redirect_to tasks_path 33 else 34 render :edit 35 end 36end 37 38 39 def destroy 40 41 @task = Task.find(params[:id]) 42 if @task.destroy(tasks_param) 43 redirect_to tasks_path 44 else 45 render :index 46 47 end 48 end 49 50 private 51 def tasks_param 52 params.require(:task).permit(:title,:content) 53 end 54end

ボタンタイプなのでbutton_toなど試してみたのですが、書き方が間違っているのかエラー画面が表示されてしまいます。

とりあえずlink_toを入れて置いてるような状態です。
コントローラーの書き方が間違っているのか。。。ご教授いただけますでしょうか。
削除機能、ボタンの追加について、です。よろしくお願いいたします。

追記
<%= link_to "delete", task, method: :delete,data: { confirm: "You sure?" } %>の部分を、

<%= link_to '削除', task_path(@task.id),method: :delete, data: { confirm: "削除してよろしいですか?", commit: "削除する", cancel: "やめる", title: "ご確認ください" } %>
に編集した後のエラー

イメージ説明

tomoya_nagai, DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ターミナルでrails routesを実行してルーティングを確認してみたらいかがでしょうか?

恐らくDELETE /tasks/:id(.:format) tasks#destroyという記述がでてくると思います。

<%= link_to "delete", task, method: :delete,data: { confirm: "You sure?" } %>の部分を
下記のように書き換えたらうまくいくと思います。

<%= link_to '削除', task_path(@task.id),method: :delete, data: { confirm: "削除してよろしいですか?", commit: "削除する", cancel: "やめる", title: "ご確認ください" } %>

投稿2018/12/27 09:02

Malas

総合スコア112

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

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

-maeji-

2018/12/29 04:10

回答ありがとうございます(^ ^) まずroutesの確認を実行したところ、おっしゃった通りの記述でした。 次にlink文を編集してみたのですが、NoMethodError in Tasks#indexが表示されました。 この場合tasksコントローラーを編集してあげればいいんですかね?
Malas

2018/12/29 04:23

No Method Errorは文字通りメソッドがないという意味です。 ルートの一覧表を確認してみましょう。 あとindex.html.erbのどこでエラーが発生していますか?
-maeji-

2018/12/31 04:29

>ルートの一覧表を確認 route.rb Rails.application.routes.draw do # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html resources :tasks root to: 'tasks#destroy' end と編集してみました。 >index.html.erbのどこでエラー 13行目です。メソッドdeleteの部分をdestroyにするとかですかね?
Malas

2018/12/31 05:07

なぜメソッドのdeleteをdestroyに変更するんですか?destroyというメソッドはありません。 root to: tasks#destroyというのは書く必要ありますか? destroy.html.erbを作成しているんですか?
-maeji-

2019/01/11 08:03

ごめんなさい。 rails routes、resources等の理解ができていませんでした。 resourcesで定義されているのでrootに書く必要はありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問