Ruby on Rails [POST] no route matches
Railsで簡単なCRUD機能の勉強のため、タスク管理アプリを作成していました。
フォームをパーシャルで実装しようとしたところ、newとeditのビューでsubmitを押下すると
以下のエラーメッセージが発生しました。
パーシャルを実装する前は、newのビューで「登録する」ボタンでフォームを送信し、
createアクションが呼ばれ、モデルもうまく動作し、登録されたテキストを確認できました。
パーシャルを実装すると、ボタンが何故か「保存する」に変わり、ルーティングの設定やコントローラーのメソッドを触っていなのに
ルーティングに問題があるようなエラーメッセージが出てしまいました。
ルーティングに設定を加えずに(パーシャル実装前は上手く動作してるので)、”ビューの設定でエラーを解決したいです”。
コメントアウトしているところがパーシャルに変更したところです。
発生している問題・エラーメッセージ
ActionController::RoutingError (No route matches [POST] "/tasks/new"):
new.html.slim
new.html.slim
1h1 タスクの新規登録 2 3.nav.justify-content-end 4 = link_to '一覧', tasks_path, class: 'nav-link' 5 6/ = form_with model: @task, local: true do |f| 7/ .form-group 8/ = f.label :name 9/ = f.text_field :name, class: 'form-control', id: 'task_name' 10/ .form-group 11/ = f.label :description 12/ = f.text_area :description, rows: 5, class: 'form-control', id: 'task_description' 13/ = f.submit nil, class: 'btn btn-primary' 14 15= render partial: 'form', locals: { task: @task } 16
edit.html.slim
edit.html.slim
1h1 タスクの編集 2 3.nav.justify-content-end 4 = link_to '一覧', tasks_path, class: 'nav-link' 5 6/ = form_with model: @task, local: true do |f| 7/ .form-group 8/ = f.label :name 9/ = f.text_field :name, class: 'form-control', id: 'task_name' 10/ .form-group 11/ = f.label :description 12/ = f.text_area :description, rows: 5, class: 'form-control', id: 'task_description' 13/ = f.submit nil, class: 'btn btn-primary' 14 15= render partial: 'form', locals: { task: @task } 16
_form.html.slim
_form.html.slim
1= form_with model: task, local: true do |f| 2 .form-group 3 = f.label :name 4 = f.text_field :name, class: 'form-control', id: 'task_name' 5 .form-group 6 = f.label :description 7 = f.text_area :description, rows: 5, class: 'form-control', id: 'task_description' 8 = f.submit nil, class: 'btn btn-primary' 9
routes.rb
routes.rb
1Rails.application.routes.draw do 2 root to: 'tasks#index' 3 resources :tasks 4 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 5end 6
tasks_controller.rb
tasks_controller.rb
1class TasksController < ApplicationController 2 def index 3 @tasks = Task.all 4 end 5 6 def show 7 @task = Task.find(params[:id]) 8 end 9 10 def new 11 @task = Task.new 12 end 13 14 def edit 15 @task = Task.find(params[:id]) 16 end 17 18 def update 19 task = Task.find(params[:id]) 20 task.update!(task_params) 21 redirect_to tasks_url, notice: "タスク「#{task.name}」を更新しました" 22 end 23 24 def destroy 25 task = Task.find(params[:id]) 26 task.destroy 27 redirect_to tasks_url, notice: "タスク「#{task.name}」を削除しました。" 28 end 29 30 def create 31 task = Task.new(task_params) 32 task.save! 33 redirect_to tasks_url, notice: "タスク「#{task.name}」を登録しました。" 34 end 35 36 private 37 38 def task_params 39 params.require(:task).permit(:name, :description) 40 end 41end
一応rake routes
$ bin/rake routes Running via Spring preloader in process 3426 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 rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
補足情報(FW/ツールのバージョンなど)
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin19]
Rails 5.2.4.2
Slim 4.0.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。