2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[リファクタリング] 1週間の投稿数 特定の期間の投稿数表示 scope 引数 map reverse

Last updated at Posted at 2021-10-02

初めに

ポートフォリオで、過去1週間の投稿数を表示させるグラフを作成していましたが、
今回リファクタリングをしてみました。

スクリーンショット 2021-10-02 21.53.15.png

リファクタリング前の実装記事は以下です

リファクタリング前

post.rb
scope :created_yesterday, -> { where(created_at: 1.day.ago.all_day) }
scope :created_2days_ago, -> { where(created_at: 2.days.ago.all_day) }
scope :created_3days_ago, -> { where(created_at: 3.days.ago.all_day) }
scope :created_4days_ago, -> { where(created_at: 4.days.ago.all_day) }
scope :created_5days_ago, -> { where(created_at: 5.days.ago.all_day) }
scope :created_6days_ago, -> { where(created_at: 6.days.ago.all_day) }

リファクタリング後

post.rb
scope :created_days_ago, ->(n) { where(created_at: n.days.ago.all_day) }
グラフ表示の部分で以下のように記載してあげれば、 6日前の投稿、5日前の投稿などが取り出せます。
show.html.erb
data: [<%= @posts.created_days_ago(6).count %>,
<%= @posts.created_days_ago(5).count %>,
<%= @posts.created_days_ago(4).count %>,
<%= @posts.created_days_ago(3).count %>, 
<%= @posts.created_days_ago(2).count %>,
<%= @posts.created_days_ago(1).count %>,
<%= @posts.created_days_ago(0).count %>],

さらにリファクタリング

上記の表示部分も長くなってしまってるので修正します。

post.rb
scope :created_days_ago, ->(n) { where(created_at: n.days.ago.all_day) }

#以下追加
def self.past_week_count
 (1..6).map { |n| created_days_ago(n).count }.reverse
end
show.html.erb
data: <%= @posts.past_week_count %>,

:frowning2:モデルに追加した記述について理解していきます。
リファクタリング前は、created_days_agoに6~0までの引数を与えていましたが、
(0..6)というrangeオブジェクトで展開して値を渡すようにします。
そしてmapを使用して配列にします。
mapは、ループ処理を実行し、処理結果を配列にして返すメソッドです。
このままだと、0~6になってしまうので、反転させるためにreverse記載します。

終わり

もっと上手にコード書けるように頑張ろうと思いました。 ポートフォリオのフィードバックを丁寧にいただけてありがたい限りです。
2
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?