Rails モデルで Time Zone(タイムゾーン)を validation

Rails でユーザーにタイムゾーンを設定してもらうフォームを作成した場合に、保存されるタイムゾーン値が適切な値になるように User モデルで validation を行う方法です。inclusion の validation を使います。

スポンサーリンク

— 環境 —
rails-4.0.1

タイムゾーン設定フォームのビューでは time_zone_select メソッドを使用します。

ActiveSupport::TimeZone::MAPPING.keys でタイムゾーン値を取得

User モデルに time_zone カラムを作成しますが、ここに保存される値は Rails が time_zone_select メソッドで出力する select option フォームの value の値だけに限定したい。そこで、User モデルに validation を書きます。調べたところ、以下の方法で Rails が用意する time_zone 値の配列を取得できます。

これで、time_zone の value 値として使われる要素の配列を取得できるので、validation の inclusion の指定に利用します。

validation のテストを書いて実装

先に User モデルの validation のテストを書きます。

spec/models/user_spec.rb

テストが失敗することを確認した後、User モデルに validation を実装。

テストが通ることを確認したら終了です。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!