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

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

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

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

Ruby on Rails

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

Q&A

0回答

906閲覧

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

-maeji-

総合スコア39

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/12/18 09:28

編集2018/12/18 10:53

初学者です。
シンプルなアプリを作成する課題にとり組んでいます。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

:追記、route.rb

route.rb

1Rails.application.routes.draw do 2 3 resources :tasks 4 root to: 'tasks#index' 5 6end

実装したいのはボタンタイプなのでbutton_toなど試してみたのですが、書き方が間違っているのかエラー画面が表示されてしまいます。以下がbutton_toで編集したものです。
イメージ説明

以下、追記

この作業をする前に、編集画面(edit)と、新規作成画面(new)で、updateアクションとcreateアクションを実装できました。
イメージ説明
デザインは違いますがとりあえずできました。
これらはform_forメソッドで編集しました。

edit.html.erb

edit.html.erb

1<h1>タスク編集画面</h1> 2 注:登録ボタンを押すとupdateアクションに処理が飛ぶ 3<%= form_for @task do |f| %> 4<div> 5 <%= f.text_field :title %> 6 <%= f.label :title %> 7</div> 8 9<div> 10 <%= f.text_field :content %> 11 <%= f.label :content %> 12</div> 13 14<%= f.submit %> 15 16<% end %>

new.html.erb

new.html.erb

1<h1>新規作成画面</h1> 2注:登録ボタンを押すとcreateアクションに処理が飛ぶ 3<%= form_for @task do |f| %> 4<div> 5 <%= f.text_field :title %> 6 <%= f.label :title %> 7</div> 8 9<div> 10 <%= f.text_field :content %> 11 <%= f.label :content %> 12</div> 13 14<%= f.submit %> 15 16<% end %>

form_for @task、それからsubmitとすることで勝手に削除ボタンができると思っていました。既存のデータをとってくるということでfindでparamsを取得するのだろうな、というのは把握しています。
・・・まだ解説が不十分だと思いますが、全てにおいて勉強不足で言語化できないです、すいません。
今新たに浮かんだのは、なぜform_forで編集ができなかったか、が知りたいです。
![イメージ説明]
(30c09a56eeb4474d43d10d11539796aa.png)
イメージ説明

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

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

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

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

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

taishiaaaaa

2018/12/18 09:58

質問文の中にエラー文も載せると回答率が上がると思います。
-maeji-

2018/12/18 09:58

ありがとうございます。修正いたします。
mather

2018/12/18 10:02

まず、何を聞きたいのかはっきりさせましょう。 「エラーを解決したい」ならエラーを書くべきですし、「destroyの実装がなぜ動かないのか知りたい」ならroutes.rbも含めてわかっている部分とわからない部分を説明しましょう。 「正解を教えてほしい」は丸投げの質問になりますのでご注意ください。
-maeji-

2018/12/18 10:56

すいません、まだ不十分かと思いますが、追記、更新いたしました。 何かお気づきの点ございましたらご指摘いただけたらと思います。
mather

2018/12/19 02:26

今一度質問内容を自分で読み返してほしいのですが、button_to の話ではなく、現在の実装でどんな問題が発生しているかを明確に書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問