前提・実現したいこと
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
このviewのコード全てをしっかり読まないと、この質問に答えることは不可能ですか? おそらく違いますよね? 必要十分な部分だけ記載した方が、回答がつく可能性は高まりましょう。最低限、「ここを読め」という点を示して、回答者が余計な労力を使わなくて済むように工夫するのが好ましいでしょう。
確かにそうですね。配慮に欠けておりました。
教えていただきありがとうございました。
編集後、スッキリしましたね!
> デイリーとウィークリーで別々に表示
するためには、PV数を日付に紐付けた情報、端的にはPV数を毎日集計したヒストグラム情報が、データベース上に存在することが必須ですが、それはどこにありますか?
返信ありがとうございます。
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
```
質問いただいた情報はこちらでしょうか?
よろしくお願い致します。
このコメント欄は、質問に回答する場所ではありません……。元の質問を「改善する」ヒントを提供する場所です。質問本文を編集してください。そもそも、コメント欄に書いてもほとんどの人は読まないので、質問に回答がもらえる確率は高くないでしょう。そしてコメント欄を開いてくれるお人好しの人でも、色付けもされなくてとても読みにくいので、まじめに読む気はなかなかしないでしょう。
情報が依然、致命的に不足しています。モデルImpressionのmigrationが質問に載せられていますが、それがお使いのアプリでどのように利用されているかの情報が全くありません。また、migrationだけ載せられても意味不明です。テーブルのそれぞれの項目が何を意味するのかの説明が不可欠です。なかでも、この質問に関係する項目がどれであり、それぞれが何を意味するか。そして、それ以上に致命的に欠けているのが、コントローラーにて使っているArtistモデルから、それらの情報にどのようにアクセスして取り扱うか、です。現在与えられた情報だけでは、「PV数ランキングの実装」がなぜこれでできているのかどうかさえわかりません(記載されていないコードの中にその情報があるのでしょうが)。
理想的には、回答したいと思う人が手元で状況を(仮想的にでも)再現できるに必要十分な情報を与えるべきです。つまり、不必要な情報はすべて削り、必要な情報はどれも外さない。現在の質問内容では、読者がそれを理解するのは不可能だと恐れます。
あなたの回答
tips
プレビュー