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

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

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

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

Q&A

解決済

2回答

282閲覧

RailsのTodoアプリで追加項目がindexに表示されない

suzuryu.07

総合スコア3

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/08/14 01:07

編集2021/08/15 02:39

発生した問題

簡単なTodoアプリをRuby on rails6で作成しています。データベースに新たにカテゴリの項目を追加して、それをindex.html.erb(タスク一覧を表示するビューファイル)で表示しようとしたところ、nilになってしまい何も表示されなくなりました。

エラー・意図しない動作

以下がタスク追加のフォームです

カテゴリ category 新規タスク math create task 戻る

タスク一覧の画面です。編集ボタンの前に、カテゴリとタスク名が表示されるようにしたいです。

タスク名 編集 削除

#作成したコード
以下がタスクのコントローラーのプログラムです。

ruby

1#投稿に関するコントローラー 2class TasksController < ApplicationController 3 #タスク一覧を表示するアクション 4 def index 5 #order:取得したレコードを特定のキーで並び替える。desc:大きい方から小さい方に並べる(降順) 6 @tasks = Task.order(created_at:"desc") 7 end 8 9 #タスク追加画面にアクセスする時に呼ばれる 10 def new 11 @task = Task.new 12 end 13 14 #タスク追加時に呼ばれる。Create Taskボタンを押したときに実行されるアクション 15 def create 16 #.createはモデルの生成から保存をまとめて実行する。.newの場合は、.saveメソッドの処理も必要になる。 17 #.newは生成したインスタンスを用いて処理を行いたい場合に用いることができる。if文とか 18 #@task = Task.create(task_params) 19 20 21 @task = Task.new( 22 category:params[:category], 23 title:params[:title] 24 ) 25 @task.save 26 27 redirect_to tasks_path #_pathでトップ画面へのリンクを表す。 28 end 29 30 #タスク編集画面にアクセスするときに呼ばれる。/tasks/:id/edit 31 def edit 32 @task = Task.find_by(id:params[:id]) #idカラムがparams[:id]である投稿データを取得 33 end 34 35 #タスク編集時に呼ばれる。Update Taskボタンを押したときに実行されるアクション 36 def update 37 @task = Task.find_by(id:params[:id]) #インスタンス変数にタスクをセットする。更新したいレコード(タスク)を代入する 38 @task.update(task_params) #updateメソッドの実行 task_paramsメソッドを実行して、その戻り値をupdateメソッドの引数として使用する。 39 redirect_to tasks_path #変更したら、トップ画面へ移動する。 40 end 41 42 #タスクの削除 43 def destroy 44 @task = Task.find_by(id:params[:id]) 45 @task.destroy 46 redirect_to tasks_path 47 end 48 49 #外部から使えないようにする。 50 #Taskモデルのtitle(タスク名)パラメータが渡ってきたときのみタスク追加を行う。 51 private 52 #ユーザーから悪意のある(指定したデータ以外など)パラメータが渡ってきても、安全に処理してくれる。 53 #requireメソッド:データのオブジェクトを定める 54 #permitメソッド:変更を加えられるキーを指定する。許可していない項目の変更はしない。 55 def task_params 56 params.require(:task).permit(:category,:title) 57 end 58end

以下は、タスク一覧を表示するhtmlのコードです。

html

1<h1>タスク一覧</h1> 2<%= link_to '追加', new_task_path %> 3<!--表形式でタスクを出力する。--> 4<table> 5 <thead> 6 <tr> 7 <th>タスク名</th> 8 </tr> 9 </thead> 10 <tbody> 11 <!--呼び出し元のアクション(index)から受け取った変数を処理する。--> 12 <!--@tasksに代入されている配列データをeach文で一つずつ変数taskに代入し、一覧を表示する。--> 13 <% @tasks.each do |task| %> 14 <table border="1"> 15 <tbody> 16 <tr> 17 <!--パスの指定:rails routesで指定しているルーティング名に_pathをつけると、コントローラーのアクションにリンクを貼る(飛ぶ)--> 18 <td><%= task.category %></td> 19 <td><%= task.title %></td> 20 <td><%= link_to("編集",edit_task_path(task)) %></td> 21 <td><%= link_to("削除",task_path(task),method: :delete, data: { confirm: "本当に削除しますか?" }) %></td> 22 <!--method:httpメソッドを指定するときに使用する。destroyアクションを使用したい時は、deleteを指定する。--> 23 <!--confirmで削除する際の確認フォームを出す。--> 24 </tr> 25 </tbody> 26 </table> 27 <% end %> 28 </tbody> 29</table>

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

自己解決

Task.new(task_params)に変更したところ、うまく動作しました。def task_paramsのタスクを追加するメソッドを使っていないことが原因だと思います。

投稿2021/08/15 02:40

suzuryu.07

総合スコア3

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

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

0

orderメソッドの前にallなどでレコード取得してないせいな気がします

投稿2021/08/14 04:30

kokitail

総合スコア135

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

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

suzuryu.07

2021/08/14 15:04

ご返信ありがとうございます。 @tasks = Task.all.order(created_at: :desc) に変更しても、何も変化ありませんでした。htmlが問題でしょうか?
kokitail

2021/08/15 01:33

デバッグで`@tasks`の中身がちゃんと取得できているか確認してほしいです (railsコンソールでレコード取れるかでも良いです) あとはそもそも意図した通りにコントローラとviewファイルが呼び出されているかも気になりますかね
suzuryu.07

2021/08/15 02:37

Task.new(task_params)に変更したところ、うまく動作しました。task_paramsメソッドを使っていないことがうまく動作しなかった原因だと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問