Railsにチャレンジして、Webアプリケーションというものを作ろうとしています。
新規投稿画面のリンクposts/newに行こうとすると、なぜかPosts#showに関してエラーが出てきます。
posts/showに行くときは、何もエラーが出ないで、ますます不思議です。
routes.rb
ruby
1Rails.application.routes.draw do 2 3 get '/' => "home#top" 4 # localhost:3000/top のアドレスで来ると、homeコントローラーの、topアクションが起動する 5 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 6 7 get 'posts/index' => "posts#index" #投稿一覧 8 get 'posts/:id' => "posts#show" #投稿詳細 9 10 get 'posts/new' => "posts#new" #新規投稿 11 post 'posts/create' => "posts#create" #新規投稿確認 12 13 get 'about' => "home#about" 14 15end
posts.controller.ruby
ruby
1class PostsController < ApplicationController 2 3 def index 4 @posts = Post.all 5 end 6 7 def show 8 @post= Post.find_by(id:params[:id]) 9 end 10 11 def new 12 13 end 14 15 def create 16 @post= Post.new(content:params[:content]) 17 @post.save 18 redirect_to("/posts/index") 19 end 20 21end
new.html.erb
ruby
1<div class="main posts-new"> 2 <div class="container"> 3 <h1 class="form-heading">投稿する</h1> 4 <%= form_tag("/posts/create") do %> 5 <div class="form"> 6 <div class="form-body"> 7 <textarea name="content"></textarea> 8 <input type="submit" value="投稿"> 9 </div> 10 </div> 11 <% end %> 12 </div> 13</div>
show.html.erb
ruby
1<div class="main posts-show"> 2 <div class="container"> 3 <div class="posts-show-item"> 4 5 <p> 6 <%= @post.content %> 7 </p> 8 9 <div class="post-time"> 10 <!-- @postのcreated_atカラムのデータを表示してください --> 11 <%= @post.created_at %> 12 </div> 13 14 </div> 15 </div> 16</div>
エラーメッセージ
ruby
1NoMethodError in Posts#show 2Showing /Users/stepfstep/Desktop/ruby_lesson/tweet_app2/app/views/posts/show.html.erb where line #6 raised: 3 4undefined method `content' for nil:NilClass 5Extracted source (around line #6): 6 7 <p> 8 <%= @post.content %> 9 </p>
nomethodとあるので、find_byしたときに、DBにある以上の数のidで検索したとき、nullが帰ってくるからダメだよ、ということな気もしますが、上記の理由で、それもおかしいよな、と感じています。
何が原因で、どのように対処すれば良いのか、ご存知の方がおりましたら教えていただけると嬉しいです。
足りない情報ありましたらご連絡ください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/19 13:41