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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

1577閲覧

Railsで、posts/newに行くと、Posts#showでエラーが来る

masaking

総合スコア30

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/12/19 12:30

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が帰ってくるからダメだよ、ということな気もしますが、上記の理由で、それもおかしいよな、と感じています。

何が原因で、どのように対処すれば良いのか、ご存知の方がおりましたら教えていただけると嬉しいです。
足りない情報ありましたらご連絡ください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ruby

1 get 'posts/:id' => "posts#show" #投稿詳細 2 3 get 'posts/new' => "posts#new" #新規投稿

ルーティングは上から処理されますので、このような順番になっていると、posts/newid=newとしてposts#showに流れてしまいます。

posts/newを先に書いてください。

投稿2019/12/19 12:40

maisumakun

総合スコア145123

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

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

masaking

2019/12/19 13:41

routingがいけなかったんですね..... ずっと違うファイルばかり見ていました。 精進が足りないですね。 ありがとうございます!!
guest

0

post 'posts/create' => "posts#create"
のときに,ビューは
create.html.erb
が呼ばれるはずですが,作ってありますか?
また,

<%= form_tag("/posts/create") do %>

の部分を

<%= form_tag("/posts/create", method: :post) do %>

にする必要があります。

参考:
https://www.sejuku.net/blog/29083

投稿2019/12/19 13:06

k-810

総合スコア192

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

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

masaking

2019/12/19 14:56

作っていないです! リダイレクトする時は、対応するビューは作らない、と認識しているのですが、そのような場合でも必ず作らないといけないのでしょうか?
k-810

2019/12/20 12:00

リダイレクト見落としていました…申し訳ありませんm(_ _)m
masaking

2019/12/22 23:37

いえいえ、ご丁寧に教えていただきありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問