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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

204閲覧

イイネ数を表示させたい。undefined method `id' for nil:NilClass

ko-u

総合スコア61

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/10/23 04:57

Ruby初心者です。
現在、インスタグラムのようなアプリを作成しております。

それぞれの投稿に対して、いくつイイネがあるのか表示させたいのですが、
エラーが表示され、上手く実装することが出来ません。

エラー内容

undefined method `id' for nil:NilClass

イイネがないためにエラーになってしまうと考え、index.html.erbで
if @likes_countを加えましたが、変わらずエラーのままです。

posts/index.html.erb

<%= @likes_count if @likes_count %>

posts_controller.rb

def index @posts = Post.all @likes_count = Like.where(post_id: @post.id).count if user_signed_in? @like_hash == Like.where(user_id:current_user.id).pluck(:id,:post_id).to_h end end

ご教授頂けると大変助かります。
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

※ちょっと触っただけで忘れてるので、適当な回答になります

undefined method `id' for nil:NilClass

NilClassクラスにidなんてメソッド定義されてないけど?ってエラーな気がします。
@post.idの所で、@postに値が入ってないってことはありませんか?中身がnilだとか。

投稿2018/10/23 05:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ko-u

2018/10/24 02:34

@postを定義するということでしょうか??
退会済みユーザー

退会済みユーザー

2018/10/24 02:43

@postは変数ですよね?定義はできないと思いますが… とりえあずおすすめしときます(https://www.amazon.co.jp/Ruby%E3%81%AE%E7%B5%B5%E6%9C%AC-%E3%82%A2%E3%83%B3%E3%82%AF/dp/4798117188) で、本題ですが、 @posts = Post.all は、投稿全てを取得するという意味ですよね? であれば、@postsは配列になっているわけですが、その配列はidというメソッドやメンバを持っていませんよね?配列の中にある各要素(=各投稿)が持っているわけですので。 混乱したときは、デバッグ機能を使って、どの変数に実際に何が入っているかを確認してみたほうがよいです。適当に書いてうまくいった、では間違って覚えてしまうばっかりになりそうです。
ko-u

2018/10/24 03:53

参考文献のご提示までありがとうございます。Ruby歴が大変浅く、混乱してしまうことが多いのでデバック機能というものを聞き、ぜひ活用してみようと思いました。ありがとうございます!
退会済みユーザー

退会済みユーザー

2018/10/24 03:57

デバッグ機能に関する情報って驚くほど少なく、初心者さんがその存在を知らないことがままあります。しかし、当たり前に使われている機能だったりします。少しずつでもいいので調べて、使ってみてください。
ko-u

2018/10/24 05:13

ありがとうございます!!
guest

0

ベストアンサー

@likes_count = Like.where(post_id: @post.id).count

@post変数を用意して、想定するようPostテーブルのレコード1つを格納してやればいいです。

投稿2018/10/23 05:00

編集2018/10/24 03:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ko-u

2018/10/23 05:20

回答して頂きありがとうございます! @post = Post.allに変更をさせたところ、Did you mean? ids というエラーが表示されてしまいました。
退会済みユーザー

退会済みユーザー

2018/10/23 05:23

@postには何が入ると想定していますか?
ko-u

2018/10/24 02:30

@postは一つの投稿を想定しています。
退会済みユーザー

退会済みユーザー

2018/10/24 03:05

@post = Post.allにしてしまうと @postにはPostテーブルのレコード全てが格納されてしまいます。 であればPost.allの部分を修正すればいいですね。
ko-u

2018/10/24 03:50

丁寧にありがとうございます。実装し直してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問