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

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

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

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

Ruby

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

Q&A

解決済

2回答

1017閲覧

modelのsave後のrenderが上手く動作しない

zvub1123

総合スコア230

Ruby on Rails 5

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

Ruby

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

0グッド

1クリップ

投稿2019/08/15 02:53

編集2019/08/15 05:14

実現したいこと

presentations_controller 内の create アクションで presentation の save に成功した後、
event_show_path に該当する event_path(イベント名) への render が上手く行かず困っています。
どなたかご助力いただけますでしょうか。

発生しているエラー

ruby

1ActionView::MissingTemplate (Missing template /events with {:locale=>[:en], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", :html, :text, :js, :css, :ics, :csv, :vcf, :vtt, :png, :jpeg, :gif, :bmp, :tiff, :svg, :mpeg, :mp3, :ogg, :m4a, :webm, :mp4, :otf, :ttf, :woff, :woff2, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip, :gzip], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in: 2 * "/Users/abc/RailsProject/TEST_Rails/app/views" 3):

各ファイル

  • routes.rb

ruby

1Rails.application.routes.draw do 2 resources :events, param: :event_name do 3 resources :presentations 4 end 5end
  • presentations_controller.rb

ruby

1class PresentationsController < ApplicationController 2 def create 3 @presentation = Presentation.new 4 @presentation.presentation_name = params[:presentation][:presentation_name] 5 @presentation.description = params[:presentation][:description] 6 @event = Event.find_by(event_name: params[:event_event_name]) 7 @presentation.Event_id = @event[:id] 8 # WIP 9 if @presentation.save 10 render event_path(params[:event_event_name]) 11 # render events_path 12 else 13 render 'new' 14 end 15 end 16 17 private 18 def presentation_params 19 params.require(:presentation) 20 .permit(:presentation_name, :description) 21 end 22end

---------------追記---------------

  • rake routesの実行結果
$ rake routes Prefix Verb URI Pattern Controller#Action event_presentations GET /events/:event_event_name/presentations(.:format) presentations#index POST /events/:event_event_name/presentations(.:format) presentations#create new_event_presentation GET /events/:event_event_name/presentations/new(.:format) presentations#new edit_event_presentation GET /events/:event_event_name/presentations/:id/edit(.:format) presentations#edit event_presentation GET /events/:event_event_name/presentations/:id(.:format) presentations#show PATCH /events/:event_event_name/presentations/:id(.:format) presentations#update PUT /events/:event_event_name/presentations/:id(.:format) presentations#update DELETE /events/:event_event_name/presentations/:id(.:format) presentations#destroy events GET /events(.:format) events#index POST /events(.:format) events#create new_event GET /events/new(.:format) events#new edit_event GET /events/:event_name/edit(.:format) events#edit event GET /events/:event_name(.:format) events#show PATCH /events/:event_name(.:format) events#update PUT /events/:event_name(.:format) events#update DELETE /events/:event_name(.:format) events#destroy

わかっている事

  • プレゼンテーションを登録するためのViewの時点(def new)の時点では、イベント名(params[:event_event_name])は取得できている
  • DBを確認したところ、@presentation.saveも正常に実行されている

以上です。
上記に記載の通り、routesファイルではresourcesをネストしており、上記のファイル群とは直接関係のないイベント一覧ページから、イベント詳細ページ(event_path(params[:event_event_name]))へ遷移できる事は確認済みです。

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

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

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

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

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

guest

回答2

0

自己解決

自己解決しました。
結論から書くと、save後のリダイレクトをrenderで行なっていたことが問題でした。
いかの通りredirect_toに変更したところ、無事にリダイレクトされたことを確認しました。

ruby

1 def create 2 @presentation = Presentation.new 3 @presentation.presentation_name = params[:presentation][:presentation_name] 4 @presentation.description = params[:presentation][:description] 5 @event = Event.find_by(event_name: params[:event_event_name]) 6 @presentation.Event_id = @event[:id] 7 # WIP 8 if @presentation.save 9 redirect_to event_path(event_name: params[:event_event_name]) 10 # render events_path 11 else 12 render 'new' 13 end 14 end

以下のURLが参考になりました。

【Rails】redirect_toとrenderの使い分け

これまで、あまりrenderredirect_toの違いを意識したことはありませんでしたが、いい勉強になりました。

投稿2019/08/15 15:37

zvub1123

総合スコア230

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

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

0

render event_path ですから、app/views/events/show.html.* を探しに行ってると思われます。
MissingTemplate (Missing template /events 
というエラーですからそうっぽい。

app/views/events/ はありますか?
もし、そういうviewでないつもりなら、routesの書き方を見なおして下さい

投稿2019/08/15 03:22

winterboum

総合スコア23329

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

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

zvub1123

2019/08/15 03:51

app/views/events/ は存在しています。。 イベント一覧に相当する app/views/events/index.html.erb では Event.all で取得した @events をforeachで回しながらリンクを生成しており、 生成されたリンクから「各イベントの詳細ページ」に飛ぶために event_path(event_name)と記載しているのですが、そちらは問題なく動作しています。
winterboum

2019/08/15 04:46

ありますか。そこに show.html.*もあるんですね? エラーメッセージでちょっと気になってる所があります。 Missing template /events で Missing template /events/show じゃないんですね。 う〜〜む。 もうちょい考えてみます
zvub1123

2019/08/15 05:16

はい、show.html.erb / index.html.erb 共に存在しています。 こちらも調査します。引き続きよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問