railsで投稿サイトを作っています。
現在planを投稿できる状態になっているのですが、それとは別にcourseも投稿できるようにしたいです。
そこでまた新たにform_withを使ってcourseの投稿フォームを作成しました。投稿ページのURLは"/courses_post"です。
しかし、
No route matches [POST]"/courses_post"
とルーティングエラーが出てしまいます。
ルート一覧はこうなっています。
###該当するソースコード
↓がviewのcourses/new.html/erbです。
view/courses/new.html.erb
1 2<div class="col-sm-6 offset-sm-3"> 3 <%= form_with(model: @course, local: true) do |f| %> 4 5 <div class"form-group"> 6 <%= f.label :number, 'Number' %> 7 <%= f.text_field :name, class: 'form-control' %> 8 </div> 9 10 <div class="form-group"> 11 <%= f.label :text, 'Text' %> 12 <%= f.text_area :text, class: 'form-control' %> 13 </div> 14 15 <%= f.submit 'courses_post', class: 'btn btn-primary btn-block' %> 16 <% end %> 17</div>
↓がroutes.rbです。
routes.rb
1Rails.application.routes.draw do 2 root to: 'toppages#index' 3 4 get 'login', to: 'sessions#new' 5 post 'login', to: 'sessions#create' 6 delete 'logout', to: 'sessions#destroy' 7 8 get 'signup', to: 'users#new' 9 10 get 'post', to: 'plans#new' 11 12 get 'courses_post', to: 'courses#new' 13 14 resources :users, only: [:index, :show, :create] 15 16 resources :plans, only: [:index, :show, :create, :destroy] 17 18 resources :courses, only: [:create, :destroy] 19end
↓がcourses_controllerです。
courses_controller
1 2lass CoursesController < ApplicationController 3 before_action :require_user_logged_in, except: [:index, :show] 4 5 def index 6 @courses = Course.order(id: :desc) 7 end 8 9 def new 10 @course = Course.new 11 end 12 13 def create 14 @plan = plan.find(params[:id]) 15 @course = @plan.courses.build(course_params) 16 if @course.save 17 flash[:success] = 'コースを設定しました。' 18 redirect_to root_url 19 else 20 @course = @plan.courses.order(id: :desc) 21 flash.now[:danger] = 'コースの設定に失敗しました。' 22 render 'toppages/index' 23 end 24 end 25 26 def destroy 27 end 28 29 private 30 31 def course_params 32 params.require(:course).permit(:number, :outline) 33 end 34end
###自分で試したこと
routes.rbに
post 'courses_post', to: 'courses#create'
と書いたり、色々試しましたがずっと同じエラーです。
ちなみに最終的にはプランとコースを一対多にするつもりです。クックパッドの料理の手順のように、一つのプランに対してコース1,コース2があるような感じです。
その場合、投稿フォームをどのようにしたらよいのでしょうか。こちらももしお分かりであれば教えてください。
初学者なため根本的な間違いをしているかもしれません。少しでもわかることがあれば、どうかお力をお貸しください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/27 14:53 編集