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

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

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

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

Ruby on Rails

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

Q&A

0回答

423閲覧

PV数ランキングでデイリー、ウィークリーで別々に表示したい

tattobu

総合スコア16

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/12/29 05:14

編集2022/01/05 04:41

前提・実現したいこと

PV数ランキングの実装はできたのですが、
デイリーとウィークリーで別々に表示したいと思っております。

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

調べたところTime.currentを使えば表示出来るところまではわかったのですが、
「いいね数」などでの実装しかなくPV数での実装がなく
実際やってみてもうまく出来なかったため、ご教授いただければと思います。

該当のソースコード

artists.controller.rb

ruby

1class ArtistsController < ApplicationController 2 3 def ranking 4 @artists = Artist.order(impressions_count: 'DESC') 5 end 6end

view/artists/ranking.html.erb

ruby

1 <div class="artist__wrapper"> 2 <% last_impression = 1 %> 3 <% j = 1 %> 4 <% @artists.each_with_index do |artist, i| %> 5 <% if i == 1 %> 6 <% last_impression = artist.impressions_count %> 7 <% end %> 8 <div class="card"> 9 <% if artist.impressions_count != last_impression %> 10 <% j = i %> 11 <%= j %>位 12 <% last_impression = artist.impressions_count %> 13 <% else %> 14 <% last_impression = artist.impressions_count %> 15 <%= j %>16 <% end %>

db/migrate/impressions_table.rb

ruby

1class CreateImpressionsTable < ActiveRecord::Migration[6.0] 2 def self.up 3 create_table :impressions, :force => true do |t| 4 t.string :impressionable_type 5 t.integer :impressionable_id 6 t.integer :user_id 7 t.string :controller_name 8 t.string :action_name 9 t.string :view_name 10 t.string :request_hash 11 t.string :ip_address 12 t.string :session_hash 13 t.text :message 14 t.text :referrer 15 t.text :params 16 t.timestamps 17 end 18 add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false, :length => {:message => 191 } 19 add_index :impressions, [:impressionable_type, :impressionable_id, :request_hash], :name => "poly_request_index", :unique => false 20 add_index :impressions, [:impressionable_type, :impressionable_id, :ip_address], :name => "poly_ip_index", :unique => false 21 add_index :impressions, [:impressionable_type, :impressionable_id, :session_hash], :name => "poly_session_index", :unique => false 22 add_index :impressions, [:controller_name,:action_name,:request_hash], :name => "controlleraction_request_index", :unique => false 23 add_index :impressions, [:controller_name,:action_name,:ip_address], :name => "controlleraction_ip_index", :unique => false 24 add_index :impressions, [:controller_name,:action_name,:session_hash], :name => "controlleraction_session_index", :unique => false 25 add_index :impressions, [:impressionable_type, :impressionable_id, :params], :name => "poly_params_request_index", :unique => false, :length => {:params => 191 } 26 add_index :impressions, :user_id 27 end 28 29 def self.down 30 drop_table :impressions 31 end 32end 33

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

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

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

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

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

MasaSakano

2022/01/02 18:49

このviewのコード全てをしっかり読まないと、この質問に答えることは不可能ですか? おそらく違いますよね? 必要十分な部分だけ記載した方が、回答がつく可能性は高まりましょう。最低限、「ここを読め」という点を示して、回答者が余計な労力を使わなくて済むように工夫するのが好ましいでしょう。
tattobu

2022/01/03 06:58

確かにそうですね。配慮に欠けておりました。 教えていただきありがとうございました。
MasaSakano

2022/01/03 11:07

編集後、スッキリしましたね! > デイリーとウィークリーで別々に表示 するためには、PV数を日付に紐付けた情報、端的にはPV数を毎日集計したヒストグラム情報が、データベース上に存在することが必須ですが、それはどこにありますか?
tattobu

2022/01/04 07:25

返信ありがとうございます。 db/migrate/impressions_table.rb ``` class CreateImpressionsTable < ActiveRecord::Migration[6.0] def self.up create_table :impressions, :force => true do |t| t.string :impressionable_type t.integer :impressionable_id t.integer :user_id t.string :controller_name t.string :action_name t.string :view_name t.string :request_hash t.string :ip_address t.string :session_hash t.text :message t.text :referrer t.text :params t.timestamps end add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false, :length => {:message => 191 } add_index :impressions, [:impressionable_type, :impressionable_id, :request_hash], :name => "poly_request_index", :unique => false add_index :impressions, [:impressionable_type, :impressionable_id, :ip_address], :name => "poly_ip_index", :unique => false add_index :impressions, [:impressionable_type, :impressionable_id, :session_hash], :name => "poly_session_index", :unique => false add_index :impressions, [:controller_name,:action_name,:request_hash], :name => "controlleraction_request_index", :unique => false add_index :impressions, [:controller_name,:action_name,:ip_address], :name => "controlleraction_ip_index", :unique => false add_index :impressions, [:controller_name,:action_name,:session_hash], :name => "controlleraction_session_index", :unique => false add_index :impressions, [:impressionable_type, :impressionable_id, :params], :name => "poly_params_request_index", :unique => false, :length => {:params => 191 } add_index :impressions, :user_id end def self.down drop_table :impressions end end ``` 質問いただいた情報はこちらでしょうか? よろしくお願い致します。
MasaSakano

2022/01/04 10:30

このコメント欄は、質問に回答する場所ではありません……。元の質問を「改善する」ヒントを提供する場所です。質問本文を編集してください。そもそも、コメント欄に書いてもほとんどの人は読まないので、質問に回答がもらえる確率は高くないでしょう。そしてコメント欄を開いてくれるお人好しの人でも、色付けもされなくてとても読みにくいので、まじめに読む気はなかなかしないでしょう。
MasaSakano

2022/01/05 18:54 編集

情報が依然、致命的に不足しています。モデルImpressionのmigrationが質問に載せられていますが、それがお使いのアプリでどのように利用されているかの情報が全くありません。また、migrationだけ載せられても意味不明です。テーブルのそれぞれの項目が何を意味するのかの説明が不可欠です。なかでも、この質問に関係する項目がどれであり、それぞれが何を意味するか。そして、それ以上に致命的に欠けているのが、コントローラーにて使っているArtistモデルから、それらの情報にどのようにアクセスして取り扱うか、です。現在与えられた情報だけでは、「PV数ランキングの実装」がなぜこれでできているのかどうかさえわかりません(記載されていないコードの中にその情報があるのでしょうが)。 理想的には、回答したいと思う人が手元で状況を(仮想的にでも)再現できるに必要十分な情報を与えるべきです。つまり、不必要な情報はすべて削り、必要な情報はどれも外さない。現在の質問内容では、読者がそれを理解するのは不可能だと恐れます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問