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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1635閲覧

Rails タスク管理の編集を実装したがRouting Errorになる。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/06/19 11:54

タスク管理アプリに編集機能を持たせようと、実装したところ、Routing Errorになってしまい

No route matches [POST] "/tasks/1/edit"

と表示され、小一時間ほどググってみましたが原因がわからず右往左往しています。

Viewsには index(トップ画面),new(新規登録),show(登録した内容の詳細),edit(編集画面)に分かれております。

Views/indexのコード

h1 タスク一覧 = link_to '新規登録', new_task_path, class: 'btn btn-primary' .mb-3 table.table.table-hover thead.thead-default tr th= Task.human_attribute_name(:name) th= Task.human_attribute_name(:created_at) th tbody - @tasks.each do |task| tr td= link_to task.name, task td= task.created_at td = link_to '編集する', edit_task_path(task), class: 'btn btn-primary mr-3'

Views/newのコード

h1 タスクの新規登録 .nav.justify-content-end = link_to '一覧', tasks_path, class: 'nav-link' = form_with model: @task, local: true do |f| .form-group = f.label :name = f.text_field :name, class: 'form-control', id: 'task_name' .form-group = f.label :description = f.text_area :description, rows: 5, class: 'form-control', id: 'task_description' = f.submit nil, class: 'btn btn-primary'

Views/showのコード

h1 タスクの詳細 .nav.justify-content-end = link_to '一覧', tasks_path, class: 'nav-link' table.table.table-hover tbody tr th= Task.human_attribute_name(:id) td= @task.id tr th= Task.human_attribute_name(:name) td= @task.name tr th= Task.human_attribute_name(:description) td= simple_format(h(@task.description), {}, sanitize: false, wrapper_tag: "div") tr th= Task.human_attribute_name(:created_at) td= @task.created_at tr th= Task.human_attribute_name(:updated_at) td= @task.updated_at = link_to '編集する', edit_task_path, class: 'btn btn-primary mr-3'

Views/editのコード

.nav.justify-content-end = link_to '一覧', tasks_path, class: 'nav-link' = form_with model: @task, local: true do |f| .form-group = f.label :name = f.text_field :name, class: 'form-control', id: 'task_name' .form-group = f.label :description = f.text_area :description, rows: 5, class: 'form-control', id: 'task_description' = f.submit nil, class: 'btn btn-primary'

以上がViewsの中になります。

controllerではtasks_controller.rbのコード

def index @tasks = Task.all end def show @task = Task.find(params[:id]) end def new @task = Task.new end def create task = Task.new(task_params) task.save! redirect_to tasks_url, notice: "タスク#{task.name}を登録しました" end private def task_params params.require(:task).permit(:name, :description) end end def edit @task = Task.find(params[:id]) end def update task = Task.find(params[:id]) task.update!(task_params) redirect_to tasks_url, notice: "タスク#{task.name}を更新しました" end

となっています。

また、ターミナルより、rails routesと見てみると

Prefix Verb URI Pattern Controller#Action root GET / tasks#index tasks GET /tasks(.:format) tasks#index POST /tasks(.:format) tasks#create new_task GET /tasks/new(.:format) tasks#new edit_task GET /tasks/:id/edit(.:format) tasks#edit task GET /tasks/:id(.:format) tasks#show PATCH /tasks/:id(.:format) tasks#update PUT /tasks/:id(.:format) tasks#update DELETE /tasks/:id(.:format) tasks#destroy

edit_task がgetになっているからなのかと考えてみましたが、原因がわかりません。
無知な質問で申し訳ありませんが、ご回答いただけると助かります。

よろしくお願いします。

routes.rbは

Rails.application.routes.draw do root to: 'tasks#index' resources :tasks end

となっています。

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

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

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

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

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

winterboum

2021/06/19 12:48

viewを見た限りでは問題なさそうです。のでそのエラーは はて。。。 どのviewでどういう操作をしたら発生したのか など状況がわかるように編集し直してください。 エラーメッセージは省略しないで全文を
退会済みユーザー

退会済みユーザー

2021/06/19 13:04 編集

viewsのeditの一番下にあるf.submitボタンを押すと、ページ遷移せずに Routing Error No route matches [POST] "/tasks/1/edit" Routes Routes match in priority from top to bottom と出てしまいます。
guest

回答1

0

ベストアンサー

controllerを見てみると、、、、これで動くのがはて、、、、です
edit と update を private で無いところにもってってみてください。
あと、showからのedit linkはエラーになりません?

投稿2021/06/19 13:13

winterboum

総合スコア23549

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

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

退会済みユーザー

退会済みユーザー

2021/06/19 13:25

できました!privateを一番下に持って行ってみました。 showの方もlint_to~のところがおかしかったみたいです。 controllerのprivateは一番下に書いた方がいいということですか? 未熟な質問で申し訳ありません。
winterboum

2021/06/19 23:13

private にすべきものを一番下に集めて、その直上に書きましょう
退会済みユーザー

退会済みユーザー

2021/06/21 01:02

ありがとうございます!助かります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問