前提・実現したいこと
初めて質問の投稿をします。
足りない情報があれば教えていただけますと幸いです。
現在rubyで振り返りツールを作成しています。
管理者は他のメンバーの投稿に対して評価コメントを入力できるように実装しており、
あるメンバーのある投稿に対して評価コメントを保存すると、そのメンバーの投稿一覧に遷移するようにしています。
このとき、ローカル環境ではきちんと遷移するのですが
herokuではThe page you were looking for doesn't exist.となってしまいます。
本来戻りたいパスは/admin/@evaluation.appointment.user.idになり
ローカル環境では問題なく保存も遷移もできています。
エラー文をみると行き先が/appointments/appointment.id/evaluations/evaluation.idになっているので、ここがおかしいのではないかと考えているのですが解決方法がわからない状況です。
herokuでもきちんと遷移させるためにはどうすれば良いかアドバイスをいただきたいです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
ターミナル
2021-01-12T07:45:49.894913+00:00 app[web.1]: [6a0e118d-e0ed-449c-99e8-b40e864bbb2f] ActionController::RoutingError (No route matches [POST] "/appointments/11/evaluations/1"): 2021-01-12T07:45:49.894914+00:00 app[web.1]: [6a0e118d-e0ed-449c-99e8-b40e864bbb2f] #中略 2021-01-12T07:45:49.897364+00:00 heroku[router]: at=info method=POST path="/appointments/11/evaluations/1" host=appt-fb.herokuapp.com request_id=6a0e118d-e0ed-449c-99e8-b40e864bbb2f fwd="111.239.185.101" dyno=web.1 connect=0ms service=19ms status=404 bytes=1902 protocol=http
該当のソースコード
EvaluationsController
1def edit 2 @appointment = Appointment.find(params[:appointment_id]) 3 @evaluation = Evaluation.find_by(appointment_id:@appointment.id) 4 end 5 6 def create 7 @evaluation = Evaluation.find_or_initialize_by(appointment_id: evaluation_params[:appointment_id]) 8 if @evaluation.new_record? 9 @evaluation = Evaluation.new(evaluation_params) 10 @evaluation.save! 11 redirect_to "/admins/#{@evaluation.appointment.user.id}" 12 else 13 @evaluation.update(evaluation_params) 14 redirect_to "/admins/#{@evaluation.appointment.user.id}" 15 end 16 end 17 18 def update 19 @evaluation = Evaluation.find_or_initialize_by(appointment_id: evaluation_params[:appointment_id]) 20 if @evaluation.update(evaluation_params) 21 redirect_to "/admins/#{@evaluation.appointment.user.id}" 22 else 23 render :edit 24 end 25 end 26
routes
1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'appointments#index' 4 resources :checks 5 resources :admins, only: [:index, :show] 6 resources :appointments do 7 resources :evaluations, only: [:index, :create, :edit, :update] 8 end 9end
view
1<div class="input-contents"> 2 <div class="input-main"> 3 <h2 class="input-title"><%= @appointment.company %></h2> 4 <%= form_with model: @evaluation, url: appointment_evaluation_path, local: true do |f| %> 5 6 <div class="new-appt"> 7 チェック項目 8 <br> <span class="annotation">※点数は0~5点(半角)で入力してください</span> 9 </div> 10 11 #中略 12 13 コメント 14 <div> 15 <br> <%= f.text_area :comment, class:"appt_comment", id:"content"%> 16 </div> 17 18 <div class="input-btn-contents"> 19 <%= f.submit "更新", class:"appt-input-btn" %> 20 <%=link_to 'もどる', :back, class:"back-btn" %> 21 </div> 22 23 <% end %> 24 </div> 25 </div>
試したこと
・redirect_to "/admins/#{@evaluation.appointment.user.id}"
の記述がおかしいのかと思い、root_pathに飛ぶように修正してみましたが同じエラーが出ました。
・heroku上のデータベースを削除し、再度migrateしましたが挙動は変わりませんでした。
・heroku restartを行いましたが挙動は変わりませんでした。
・routes.rbで直接行き先を変更しようと思い、
post 'appointments/:id/evaluations/:id', to: 'evaluations#create'
の記述を追加したところ、質問に記述しているエラーではなく
ActionController::ParameterMissing (param is missing or the value is empty: evaluation)でstatus=400になってしまいました。
補足情報(FW/ツールのバージョンなど)
ruby 6.0.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。