Programming Journal

学習したことの整理用です。

【Rails】雑多なメモ

all_day

昨日作った記事だけ取得するscopeを作りたかったとき、Date.yesterdayTime.current.yesterdayだと想定している挙動にならない…

all_dayを使う!

# NG
scope :yesterday_published, -> { where(published_at: Date.yesterday) }

# Good
scope :yesterday_published, -> { where(published_at: 1.day.ago.all_day) }

BETWEEN '2020-10-20 00:00:00' AND '2020-10-20 23:59:59というように、丸一日分を取ってきてくれる。

f:id:Study-Diary:20201021161834p:plain
all_day

参考

Railsで特定の日の新規ユーザ数などを取るクエリを作る - Qiita
DateAndTime::Calculations

特定の条件を満たすレコード数を取得するには?

countメソッドを使う。

f:id:Study-Diary:20201021165941p:plain
コンソール画面

癖でlengthを使ってしまうけど、countだと単純な数だけじゃなくて、要素を指定した上の数も取得できる。

【Rails】世界で一番分りやすく詳しいcountメソッドの使い方 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

Action Mailer

Action Mailer関連で、簡単なはずなのにちょっと詰まったところ

送信メールのプレビューを見るには

送信したメールのプレビューは、letter_opener_webを使えばいいのですが、送信するメールのプレビューを見たいときは? study-diary.hatenadiary.jp

f:id:Study-Diary:20201021162726p:plain
rails g mailer UserMailer

メイラーを生成するときに、自動生成されるspec/mailers/previews/user_mailer_preview.rbを使う。

# Preview all emails at http://localhost:3000/rails/mailers/user_mailer
class UserMailerPreview < ActionMailer::Preview
  def report_summary #user.mailer.rbで作ったメソッド
    UserMailer.report_summary
  end
end

こんな感じで、メソッドを追加しておき、コメント部分のURLhttp://localhost:3000/rails/mailers/user_mailerへアクセスするとプレビュー画面が確認できる。

f:id:Study-Diary:20201021163718p:plain
preview画面

参考

『パーフェクト Ruby on Rails』P235

メール送信の挙動を確かめるには

cronjobで、毎日AM9時にメールを送信すると設定していたのですが、今すぐにメールを送信してみたいとき・・・ deliver_nowを呼び出す。
コンソールで、ArticleMailer.(メソッド名).deliver_nowを実行する。

f:id:Study-Diary:20201021164442p:plain
メールを送信するには

letter_opner_webで確認するとメールが送られている。

f:id:Study-Diary:20201021164707p:plain
letter_opener_web

参考

Action Mailer の基礎 - Railsガイド