前提・実現したいこと
Railsでタスク管理アプリを作成しています。
トップページにあたるindexから編集画面のeditに遷移するための記述(link_to)をしたところ
エラー画面が出現し、indexページすら開けない状態になってしまいました。
エラー画面と詳細のコードを掲載しますので、どうか解決方法をご教授いただけたらと存じます。
- 実際のエラー画面
発生している問題・エラーメッセージ
ActionController::UrlGenerationError in Tasks#index No route matches {:action=>"edit", :controller=>"tasks", :id=>nil}, missing required keys: [:id]
該当のソースコード
- index.html.hamlファイル
haml
1- @tasks.each do |t| 2 .tasks-table 3 .task-user 4 %ul 5 %li 6 %i.far.fa-user-circle 7 %li 8 %a(href="#") 9 .user-name= t.name 10 %li.details 11 .ellipsis-h= link_to '…', edit_task_path(@task), method: :get 12 .tasks-box 13 .limit-box 14 .limit-upper 15 .limit LIMIT 16 .limit-lower 17 .limit-date= t.limit_date 18 .task-box 19 .task-upper 20 .task TASK 21 .task-data 22 .task-data-inner= simple_format(t.task) 23 .created-date= t.created_at.to_s(:datetime) 24 .status-table 25 %a(href="#") 26 .now-state= t.state
- tasks_controller.rbファイル
Ruby
1class TasksController < ApplicationController 2 # before_action :set_task, only: [:edit, :show] 3 4 def index 5 @tasks = Task.order("created_at DESC").all 6 end 7 8 def new 9 @task = Task.new 10 end 11 12 def create 13 task = Task.new(task_params) 14 if task.save 15 flash[:success] = "タスクをシェアしました。達成に向けて頑張りましょう!" 16 redirect_to '/' 17 else 18 flash.now[:danger] = "送信に失敗しました。もう一度試してみてください。" 19 render 'tasks/new' 20 end 21 end 22 23 def edit 24 @task = Task.find(params[:id]) 25 end 26 27 def update 28 task = Task.find(params[:id]) 29 task.update(task_params) 30 if task.save 31 flash[:success] = "タスクを更新しました。" 32 redirect_to '/' 33 else 34 flash.now[:danger] = "送信に失敗しました。もう一度試してみてください。" 35 render 'tasks/new' 36 end 37 end 38 39 def destroy 40 task = Task.find(params[:id]) 41 task.destroy 42 redirect_to '/tasks', notice: 'タスクを削除しました。' 43 end 44 45 # def show 46 # id = params[:id] 47 # @task = Task.find(id) 48 # @status = ['todo', 'doing', 'done'] 49 # end 50 51 private 52 def task_params 53 params.require(:task).permit(:state, :name, :task, :limit_date) 54 end 55 56 # def set_task 57 # @task = Task.find(params[:id]) 58 # end 59 60end
試したこと
まずは細かい記述ミスを疑い、Webで記法を調べ書き直したりしました。(@や複数形などの部分)
次に記述の方法がいくつかあるのでそれも試しました。
= link_to '…', edit_task_path(@task), method: :get = link_to '…', "/task/#{@task.id}/edit", method: :get
補足情報(FW/ツールのバージョンなど)
もしかするとindexから直接editに遷移出来ないと思いましたので、そうであればindexからshowに遷移するように変更したいと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/12 08:39
2020/06/12 12:10
2020/06/12 13:19