タスク管理アプリに編集機能を持たせようと、実装したところ、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
となっています。
回答1件
あなたの回答
tips
プレビュー