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

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

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

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

0回答

432閲覧

No route matches [POST] を解消したい

HR-K

総合スコア6

Ruby on Rails 6

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2020/08/15 06:22

前提・実現したいこと

No route matches [POST] "/temp_answers/new" の解消

初めて質問させていただきます。railsに触れて2ヶ月程度経過し、自分なりに何か作ろうと奮闘している次第です。

投稿されたお題に回答するというアプリの試作において、
お題回答の際にルーティングエラーが発生していまいます。

本来であれば、submit送信後にはtemp_answers_path(/temp_answers(.:format))に対してPOSTとなるべきと思うのですが、
なぜか/temp_answers/newになってしまいます。

どこを修正すべきなのでしょうか。

Googleなどで検索しても原因がよくわからず、
お恥ずかしながらご教示いただけないでしょうか。
大変申し訳ございません。

発生している問題・エラーメッセージ

Routing Error No route matches [POST] "/temp_answers/new" Rails.root: /Users/user/my_app/sessions Application Trace | Framework Trace | Full Trace

該当のソースコード

temp_answersコントローラー

ruby

1class TempAnswersController < ApplicationController 2 3 def index 4 @temp_answers = TempAnswer.where(session_id: request.session_options[:id]) 5 theme_ids = @temp_answers.pluck(:theme_id) 6 @themes = Theme.find(theme_ids) 7 end 8 9 def new 10 if request.referer&.include?("/themes/search") 11 get_designated_theme 12 elsif current_user.id 13 get_theme_for_temp_user 14 else 15 get_randam_theme 16 # 答えられる回答なければリダイレクト 17 if @response == 0 18 redirect_to root_path 19 end 20 @temp_answer = TempAnswer.new 21 end 22 end 23 24 def create 25 @temp_answer = TempAnswer.create(answer_params) 26 # @temp_answer = TempAnswer.new(answer_params) 27 # if @temp_answer.save 28 # redirect_to action: 'get',new_temp_answer_path 29 # else 30 # redirect_to root_path 31 # end 32 end 33 34 def index 35 end 36 37 private 38 def answer_params 39 session_id = session['session_id'] 40 params.require(:temp_answer).permit(:answer,:theme_id).merge(session_id: session_id) 41 end 42 43 def get_randam_theme 44 # 必要なID(Answer,Theme)を取得 45 @temp_answers = Answer.where(user_id: current_user.id) 46 theme_ids = @temp_answers.pluck(:theme_id) 47 find_theme_ids = Theme.pluck(:id) 48 # 未回答のTheme :idを特定 49 theme_ids.each do |theme| 50 find_theme_ids.delete(theme) 51 # 未回答0なら分岐 52 if find_theme_ids.empty? 53 return @response = 0 54 end 55 end 56 # theme_idをセット 57 num = rand(0..(find_theme_ids.length - 1)) 58 vacant_id = find_theme_ids[num] 59 @theme = Theme.find(vacant_id) 60 @theme_id = @theme.id 61 end 62 63 64 def get_designated_theme 65 @theme = Theme.find(params[:theme_id]) 66 @theme_id = @theme.id 67 @temp_answer = TempAnswer.new 68 end 69 70 def get_theme_for_temp_user 71 max_count = Theme.all.count 72 random_num = rand(1..max_count) 73 @theme = Theme.find(random_num) 74 @theme_id = @theme.id 75 @temp_anwer = TempAnswer.new 76 end 77 78end 79

ビュー:temp_anwswers/new.html.erb

ruby

1<div class="answer-new"> 2 お題回答ページ 3</div> 4 5<div class="answer-contents"> 6 <%= form_with(model:@temp_answer, local:true) do |form| %> 7 <div class="theme-id"> 8 <div class="theme-id__info"> 9 お題ID 10 </div> 11 <%=form.text_field :theme_id, value: @theme.id, readonly: true, class: "theme-id__box"%> 12 </div> 13 <div class="theme-title"> 14 <div class="theme-title__info"> 15 お題: 16 </div> 17 <div class="theme-title__body"> 18 <%= @theme.title %> 19 </div> 20 <div class="theme-title__genre"> 21 <% if @theme.genre == 0 %> 22 生活 23 <% elsif @theme.genre == 1 %> 24 教養・文化 25 <% elsif @theme.genre == 2 %> 26 仕事 27 <% elsif @theme.genre == 3 %> 28 恋愛・性 29 <% elsif @theme.genre == 4 %> 30 宗教 31 <% elsif @theme.genre == 5 %> 32 趣味・娯楽 33 <%end%> 34 </div> 35 36 </div> 37 38 <div class="answer-box"> 39 <div class="answer-box__select"> 40 <%=form.label :answer, "#{@theme.answer1}",class:"check-label" %> 41 <%=form.radio_button :answer, "answer1", class:"check-input" %> 42 </div> 43 <div class="answer-box__select"> 44 <%=form.label :answer, "#{@theme.answer2}",class:"check-label" %> 45 <%=form.radio_button :answer, "answer2", class:"check-input" %> 46 </div> 47 </div> 48 <div class="submit-btn"> 49 <%=form.submit "回答する"%> 50 </div> 51 <% end %> 52 <div class="submit-btn"> 53 <%=link_to '回答を終了する', temp_answers_path, method: :get %> 54 </div> 55</div>

routes.rb

ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root "tops#index" 4 5 resources :users ,only: [:edit, :update, :show] 6 resources :answers ,only: [ :index, :new, :create, :show ] 7 8 resources :themes ,only: [ :index, :new, :create ] do 9 collection do 10 get 'search' 11 end 12 end 13 14 resources :temp_answers, only: [:new, :create, :index] 15end

試したこと

余計なformタグがあるといけない、という情報をみつけたため、ビューを確認するも特に余計なものはないと思われます。
createアクションの記述を変更するも変わらず(コメントアウト状態のもの→現行に変えています)

補足情報(FW/ツールのバージョンなど)

rails 6.0.0

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問