Rails で1日1回ランダムな値で情報を更新するコード

スポンサーリンク

※ このエントリーの内容は、結局上手くいかなかったので採用しませんでした。なので、参考にしないようにお願いします。最終的には、1日1回更新する情報を、DBに保存するように変更しました。

Railsアプリケーションで、ことわざや格言などがたくさん保存されているDBテーブル(proverbsテーブル)から、1日1回「今日の言葉」としてランダムに取得するコードを書きました。毎回ランダムだったら sample メソッド使ってすぐ終わりなんだけど、1日1回なので新しい日付になって最初のリクエストの時だけ「今日の言葉」の情報を更新させる。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
rails-4.0.1
devise-3.2.2
omniauth-1.1.4

クラス変数に「今日の言葉」と「保存済み日付」の情報を持たせる

トップページに表示させるためなので、HomeController の index アクションに追加。

app/controllers/home_controller.rb

@@date_info クラス変数に保存済みの日付情報、@@todays_word に今日の言葉の情報を持たせます。最初にユーザーのタイムゾーンを判定。to_formatted_s(:extra_short) は、年月日だけを取得するフォーマット用のメソッドです。

その後、保存済みの日付情報と今日の日付が異なっていた場合、つまり今日の日付が新しく変わった場合にのみ、@@todays_word を更新。保存済みの日付も新しい日付に更新する。

あとは、@todays_word インスタンス変数の情報(@todays_word.word, @todays_word.meaning)をビューで表示させればOKです。

使ってあるメソッドの詳細

“timezone”クッキーから訪問者のタイムゾーンを判定する get_user_timezone メソッドについては → Rails でユーザーのサインアップ時にタイムゾーンを自動で判定して保存 | EasyRamble

年月日だけを表示させるように日付をフォーマットする to_formatted_s(:extra_short) については → Rails で時間・時刻表示の独自フォーマットを作成する | EasyRamble

以上で、1日1回だけランダムに情報を更新させることができました。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!