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

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

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

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

Ruby on Rails

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

Q&A

解決済

2回答

1893閲覧

Railsでフォームをパーシャルで実装したいが、no route matchesになる

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

0グッド

1クリップ

投稿2020/04/16 10:58

編集2020/04/17 14:24

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

変数の指定の場所にバッククオーテーションが埋め込まれていました。
削除したら上手く行きました。

投稿2020/04/18 01:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ファームの送信先のURLに問題がある気がします。
form_withのオプションで、urlを指定してみてはどうでしょうか?

投稿2020/04/16 16:00

motoaki

総合スコア106

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

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

退会済みユーザー

退会済みユーザー

2020/04/17 11:19

form_withのオプションにurlを指定してしまうと、呼び出されるアクションが固定されてしまいます。 form_withのオプションのモデルが、新しく作られたものなのか、DBを参照しているものなのかで、createアクションかupdateアクションかをRailsが自動的に判断してくれる処理を変えたくないので、そちらでは解決できません(もちろんパーシャルを実装する前はそれで上手く動作しました)。 とはいえ、ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問