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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Ruby on Rails 5

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Ruby on Rails

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

Q&A

1回答

1392閲覧

[Rails]ランキング機能 エラー

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Ruby on Rails 5

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/29 04:47

ランキング機能を以下の記事を参考に実装しています。
https://qiita.com/MitsuguSueyoshi/items/18fa5e49a27e727f00b4
コントローラーとビューをいじるという部分で以下のようにコードを記載しました。

#ビューファイル .user_rank .profranks aa .profuserrank - @all_ranks.each.with_index(1) do |tweet, i| 第 = i 位 = tweet.age #tweets.controller.rb def index @tweets = Tweet.all.order(created_at: :desc).page(params[:page]).per(20) @tweet=Tweet.new @all_ranks = Tweet.find(Like.group(:tweet_id).order('count(tweet_id) desc').limit(3).pluck(:tweet_id)) end

エラーは以下のものになります。
イメージ説明
いいねランキングを実装してビューに上位3人を表示させたいと考えていますが、おそらく開発途中なので、上位3人いいね登録されていないとエラーが起きてしまうのでifで切り分ける必要があるのかなと考えました。
このエラーはランキングのなかに値が存在しないために起きたエラーと考えましたが実際はどのようなエラーなのか知り、ランキング表示させたいです。

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

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

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

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

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

guest

回答1

0

エラー文の中にfor nil:NilClassとあります。
なので、nil な何かに対してはeachメソッドが存在しない(使えない)から実行できないよ!という意味だと思います。

おそらく@all_ranksの中身があれば動くと思います。

投稿2020/04/29 05:04

gnfreeworks

総合スコア306

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

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

退会済みユーザー

退会済みユーザー

2020/04/29 05:22

中身ということはif文で切り分けを一旦行うかデフォルトで何かしら指定する必要があると思うのですが、その場合if @all_ranks.count=0のように指定してあげる形ですか?
gnfreeworks

2020/04/29 05:52 編集

現状のif文では、all_ranksに値がない場合でも処理を実行しようとしてしまいエラーになりますね。 例えば、仮に3名に満たなくて1名だけ、2名だけでも表示したいのであれば、 ------------- - @all_ranks.length >= 0 - @all_ranks.each.with_index(1) do |tweet, i| 第 = i 位 = tweet.age ------------- 多分ですが、こんな感じにしたらデータが0の場合はランキング表示はされず、取り敢えずエラーにはならないかと思います。 もし`いいね`された人が1名でもいれば表示されると思います。 ※コードの階層は合わせて下さいm(_ _)m
退会済みユーザー

退会済みユーザー

2020/04/29 07:27

ありがとうございます。表示させることができました。あとはユーザーのプロフィール画像を表示させるのみです。
gnfreeworks

2020/04/29 07:57

無事表示できて良かったです!引き続き頑張って下さい^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問