前提・実現したいこと
Rails 5.2.1にて開発しています。
ここに質問の内容を詳しく書いてください
railsでウェブサービスを作っていて投稿機能を実装しようとしています。
その投稿機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
No route matches [POST] "/posts/new"
該当のソースコード
rails
1config/routes.rb 2---------------- 3 4Rails.application.routes.draw do 5 get 'admin/top' => "administration#top" 6 7 get "/" => "home#top" 8 get "about" => "home#about" 9 get "terms" => "home#terms" 10 get "privacy" => "home#privacy" 11 get "index" => "home#index" 12 13 get "posts/index" => "posts#index" 14 get "posts/new" => "posts#new" 15 get "posts/:id" => "posts#show" 16 17 post "posts/create" => "posts#create" 18 19 get "posts/:id/edit" => "posts#edit" 20 post "posts/:id/update" => "posts#update" 21 post "posts/:id/destroy" => "posts#destroy" 22 23 devise_for :users 24 25 26 resources :pages, :only => [:index, :show] 27 get "pages/index" => "pages#index" 28 resources :messages, :only => [:create] 29 resources :rooms, :only => [:create, :show, :index] 30 31 32 get "users/:id/edit" => "users#edit" 33 get "pages/:id" => "pages#show" 34 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 35 36end
app/controllers/posts_controller.rb -------------------------- def new end def create @post = Post.new( content: params[:content], user_id: current_user.id, reward: params[:reward], university_name: params[:university_name], group_name: params[:group_name], entry_qualification: params[:entry_qualification], start_date: params[:start_date], finish_date: params[:finish_date], experiment_period_datail: params[:experiment_period_datail], recruit_deadline: params[:recruit_deadline], experiment_location: params[:experiment_location], experiment_location_detail: params[:experiment_location_detail], recruit_way: params[:recruit_way], recruit_detail: params[:recruit_detail], reward_detail: params[:reward_detail], remark: params[:remark] ) @post.save redirect_to("/posts/index") end
app/views/posts/new.html.erb ----------------------------- <div class="main posts-new"> <div class="container"> <h1 class="form-heading">投稿する</h1> <%= form_for("/posts/create") do |f| %> <div class="form"> <div class="form-body"> <%= f.label :"" %><br> <%= f.text_field :university_name %> <%= f.label :"" %><br> <%= f.text_field :group_name %> <%= f.label :"" %><br> <textarea name="content"> </textarea> <%= f.label :"" %><br> <textarea name="entry_qualification"> </textarea> <label class="control-label" for="experiment_period"></label><br> <%= f.label :"" %><br> <%= f.date_select :start_date, {}, class: 'form-control' %><br> <%= f.label :"" %><br> <%= f.date_select :finish_date, {}, class: 'form-control' %><br> <%= f.label :"" %><br> <textarea name="experiment_period_datail"> </textarea> <label class="control-label" for="recruit_deadline"></label><br> <%= f.date_select :recruit_deadline, {}, class: 'form-control' %><br> <%= f.label :"" %><br> <%= f.select :experiment_location,Post.experiment_locations.keys, {prompt: '選択してください'}, class: 'form-control btn btn-info' %><br> <%= f.label :"" %><br> <textarea name="experiment_location_detail"> </textarea> <%= f.label :"" %><br> <%= f.select(:reward, [["",""],["",""],["",""]]) %><br> <%= f.label :"" %><br> <textarea name="reward_detail"> </textarea> <%= f.label :"" %><br> <textarea name="recruit_way"> </textarea> <%= f.label :"" %><br> <textarea name="recruit_detail"> </textarea> <%= f.label :"" %><br> <textarea name="remark"> </textarea> <input type="submit" value="投稿"> </div> </div> <% end %> </div> </div>
試したこと
routes.rb、posts_controller.rbを自分なりに見直しましたが、どこが間違っているかわかりませんでした。
[POST] "/posts/create" になるはずが、
[POST] "/posts/new"になっている点までは理解できたのですが、なぜそうなるのかが分かりません
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。