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

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

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

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

2115閲覧

【Rails】エラーを解決し、indexからeditのページへ遷移できるようにしたい

hatori_r

総合スコア10

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/12 08:20

前提・実現したいこと

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に遷移するように変更したいと思います。

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

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

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

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

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

guest

回答1

0

ベストアンサー

edit_task_path(@task),
の@taskが未定義なのに使われているのが原因です。
ここは @tasks.each do |t| の t が使われるのでは?

投稿2020/06/12 08:28

winterboum

総合スコア23347

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

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

hatori_r

2020/06/12 08:39

winterboum様 ご回答いただきありがとうございます。 そうしましたら、= link_to 記述の部分に追加すればよろしいということでしょうか? 重ねて恐縮ですが、その記述の方法を教えていただけないでしょうか よろしくお願い致します。
winterboum

2020/06/12 12:10

.ellipsis-h= link_to '…', edit_task_path(t), method: :get
hatori_r

2020/06/12 13:19

winterboum様 ご丁寧にありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問