【Rails】雑多なメモ
all_day
昨日作った記事だけ取得するscope
を作りたかったとき、Date.yesterday
やTime.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
というように、丸一日分を取ってきてくれる。
参考
Railsで特定の日の新規ユーザ数などを取るクエリを作る - Qiita
DateAndTime::Calculations
特定の条件を満たすレコード数を取得するには?
count
メソッドを使う。
癖でlength
を使ってしまうけど、count
だと単純な数だけじゃなくて、要素を指定した上の数も取得できる。
【Rails】世界で一番分りやすく詳しいcountメソッドの使い方 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
Action Mailer
Action Mailer関連で、簡単なはずなのにちょっと詰まったところ
送信メールのプレビューを見るには
送信したメールのプレビューは、letter_opener_web
を使えばいいのですが、送信するメールのプレビューを見たいときは?
study-diary.hatenadiary.jp
メイラーを生成するときに、自動生成される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
へアクセスするとプレビュー画面が確認できる。
参考
『パーフェクト Ruby on Rails』P235
メール送信の挙動を確かめるには
cronjob
で、毎日AM9時にメールを送信すると設定していたのですが、今すぐにメールを送信してみたいとき・・・
deliver_now
を呼び出す。
コンソールで、ArticleMailer.(メソッド名).deliver_now
を実行する。
letter_opner_web
で確認するとメールが送られている。