追加:気づき
renderを使うと読み込まない(?)から@topic.titleが取得できないのでしょうか??
topicの詳細画面内にpostを表示したりpostの投稿フォームを入れるとなると、renderは使えないのでしょうか?
前提・実現したいこと
Ruby on Railsを勉強中です。
掲示板のようなwebアプリケーションを作るためRailsで電子掲示板を作成するチュートリアル | qs Developersを主に参考にしています。
発生している問題・エラーメッセージ
該当のソースコード
app/views/topics/show.html.erb
Ruby
1<div class="main topics-show"> 2 <div class="container"> 3 <div class="topics-show-items"> 4 <div class="inline-block"> 5 <div class="topics-show-item"> 6 7 8 <h1><%= @topic.title %></h1> 9 10 <% @posts.each_with_index do |post , idx| %> 11 <p> 12 <%= idx + 1 %>. <%= post.name %>:<%= post.seats %>【<%= post.rating %>】 13 </br><%= post.body %> 14 </p> 15 <% end %> 16 17 </div> 18 </div> 19 20 <div class="inline-block"> 21 <div class="topics-new-item"><h3>座席レポートをする</h3> 22 <%= form_for @newpost, :url => post_create_path do |f| %> 23 <p>名前</p> 24 <p><%= f.text_field :name %></p> 25 26 <p>座席番号</p> 27 <p><%= f.text_field :seats %></p> 28 29 <p>評価</p> 30 <p><%= f.select :rating, [["★☆☆☆☆", "★☆☆☆☆"],["★★☆☆☆", "★★☆☆☆"],["★★★☆☆", "★★★☆☆"],["★★★★☆", "★★★★☆"],["★★★★★", "★★★★★"]] %></p> 31 32 <p>詳細</p> 33 <p><%= f.text_area :body %></p> 34 35 <%= f.hidden_field :topic_id %> 36 <%= f.submit(["投稿する"]) %> 37 <% end %> 38 39 </div> 40 </div> 41 </div> 42 </div> 43</div>
app/controllers/post_controller.rb
Ruby
1class PostController < ApplicationController 2 3def create 4 @post = Post.new( 5 params[:post].permit(:topic_id, :name, :seats, :rating, :body)) 6 if @post.save 7 redirect_to topics_show_path(params[:post]['topic_id']) 8 else 9 render("topics/show") 10 end 11end 12end
app/controllers/topics_controller.rb
Ruby
1class TopicsController < ApplicationController 2 3 def index 4 @topics = Topic.all 5 @newTopic = Topic.new 6 end 7 8 def show 9 @topic = Topic.find(params[:id]) 10 @newpost = Post.new(:topic_id => params[:id]) 11 @posts = Post.where(topic_id: params[:id]) 12 end 13 14 def create 15 @topic = Topic.new(params[:topic].permit(:title)) 16 @topic.save 17 redirect_to topics_index_path 18 end 19 20 def delete 21 @topic = Topic.find(params[:id]) 22 @topic.destroy 23 redirect_to topics_index_path 24 end 25 26end 27
config/routes.rb
Ruby
1Rails.application.routes.draw do 2 get "login" => "users#login_form" 3 post "login" => "users#login" 4 post "logout" => "users#logout" 5 post "users/:id/update" => "users#update" 6 get "users/:id/edit" => "users#edit" 7 post "users/create" => "users#create" 8 get "signup" => "users#new" 9 get "users/index" => "users#index" 10 get "users/:id" => "users#show" 11 get "topics/index" 12 get "topics/show/:id" => "topics#show", as: :topics_show 13 get "topics/show" 14 post "topics/create" => "topics#create" 15 delete "topics/delete/:id" => "topics#delete", as: :topic_delete 16 get "posts/:id" => "posts#show" 17 post "posts/create" => "post#create", as: :post_create 18 get "/" => "home#top" 19 get "about" => "home#about" 20end
app/models/post.rb
class Post < ApplicationRecord belongs_to :topic validates :name, {presence: true} validates :seats, {presence: true} validates :body, {presence: true} end
詳細
タイトルの通り投稿に失敗したとき直前の投稿内容を表示したくてpost_controller.rbにrenderを追加して、実際にわざと失敗の投稿(空の投稿)をしたら上のようなエラーになってしまいました。成功の投稿をしたときはちゃんと表示してくれます。
render追加前は@topic.titleに関するエラーはありませんでした。
いろいろ調べたのですが初心者のため全くどうすればいいかわかりません。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/20 02:27
2018/12/20 05:18
2018/12/20 05:19
退会済みユーザー
2018/12/20 05:33
2018/12/20 08:13
2018/12/21 00:00