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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1616閲覧

ruby on rails でブログ投稿機能を作ろうとしています

t1gerkngd0m

総合スコア26

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/04/21 02:16

基本的な質問をさせていただきます。

前提・実現したいこと

ruby on rails で初心者向けのブログ投稿、カテゴリ選択できるwebアプリを作っています。
ローカルホストでhttp://localhost:3000/posts/newで項目を入力し、投稿を作ろうとしましたがエラーが発生しました

発生している問題・エラーメッセージ

/app/views/posts/show.html.erb where line #5 raised:
undefined method `name' for nil:NilClass

該当のソースコード
/app/views/posts/show.html.erb

<p id='notice'><%= notice %></p> <P> <strong>Category:</strong> <%= @post.category.name %> </P> <p> <strong>Title:</strong> <%= @post.title %> </p> <p> <strong>Body:</strong> <%= @post.body %> </p> <p> <strong>Created_at:</strong> <%= @post.created_at %> </p>

/app/controllers/posts_controller.rb
class PostsController < ApplicationController

def new @post = Post.new @categories = Category.all end def create post_params = params.require(:post).permit(:category_id, :title, :body) @post = Post.new(post_params) if @post.save redirect_to @post, notice: 'Post was successfully created.' else render :new end end def show @post = Post.find(params[:id]) end def index @posts = Post.all end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) post_params = params.require(:post).permit(:category_id, :title, :body) if @post.update(post_params) redirect_to @post, notice: 'Post was successfully updated.' else render :edit end end def destroy @post = Post.find(params[:id]) @post.destroy redirect_to posts_url, notice: 'Post was successfully destroyed.' end

end

試したこと

posts_controllerに問題があるのかと思いましたが、特に見当たりませんでした。

補足情報(言語/FW/ツール等のバージョンなど)
ruby, ruby on rails

より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1@post.category.name

このコードに対して「undefined method `name' for nil:NilClass」なので

@post.categoryがnilになっていてnameが取れていないです。
@post.categoryが正常に取得できていない原因を調べて見たらよいのではないでしょうか?

Postモデルのソースも書いてもらえると、もっとアドバイスできると思います。

投稿2016/04/21 02:34

ShoheiUyama

総合スコア206

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

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

t1gerkngd0m

2016/04/21 02:37

/app/models/post.rb class Post < ActiveRecord::Base belongs_to :category end アソシエーションが上手くいってないのでしょうか?
ShoheiUyama

2016/04/21 04:14 編集

belongs_to :category ですと、Postが子になるのですがそれは正しいですか? あと、categoryはテーブル名でしょうか? 一般的かどうか分かりませんが、テーブル名は複数形にするものだと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問