- 更新日: 2014年3月5日
- Rails
Rails モデルで Time Zone(タイムゾーン)を validation
スポンサーリンク
Rails でユーザーにタイムゾーンを設定してもらうフォームを作成した場合に、保存されるタイムゾーン値が適切な値になるように User モデルで validation を行う方法です。inclusion の validation を使います。
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
— 環境 —
rails-4.0.1
タイムゾーン設定フォームのビューでは time_zone_select メソッドを使用します。
1 |
<%= f.time_zone_select :time_zone %> |
ActiveSupport::TimeZone::MAPPING.keys でタイムゾーン値を取得
User モデルに time_zone カラムを作成しますが、ここに保存される値は Rails が time_zone_select メソッドで出力する select option フォームの value の値だけに限定したい。そこで、User モデルに validation を書きます。調べたところ、以下の方法で Rails が用意する time_zone 値の配列を取得できます。
1 |
ActiveSupport::TimeZone::MAPPING.keys |
これで、time_zone の value 値として使われる要素の配列を取得できるので、validation の inclusion の指定に利用します。
validation のテストを書いて実装
先に User モデルの validation のテストを書きます。
spec/models/user_spec.rb
1 2 3 4 5 |
# time_zone shoud be in ActiveSupport::TimeZone::MAPPING.keys describe "when time_zone is invalid" do before { @user.time_zone = "Hogefuga" } it { should_not be_valid } end |
テストが失敗することを確認した後、User モデルに validation を実装。
1 2 3 4 5 |
class User < ActiveRecord::Base #... validates :time_zone, inclusion: { in: ActiveSupport::TimeZone::MAPPING.keys } #... end |
テストが通ることを確認したら終了です。
スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
>> 次の記事 : Rails でユーザーのサインアップ時にタイムゾーンを自動で判定して保存
<< 前の記事 : Rails コントローラーで使う I18n.t メソッドのキーを省略
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!