発生した問題
簡単な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>
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。