久保清隆のブログ

ライフハック、健康、旅行など、役立つ情報を書きます。

Railsで日付・時刻を入力するためのフォームを簡単に作る方法まとめ

web制作をしてて日付や時刻を入力するためのフォームを作ることがよくある。
Railsには年月日時分を自動的に作成してくれるヘルパーメソッドがある。今まで知らずに地道にドロップダウンリストを作成してしまっていた。。
便利なのでまとめておく。

4つのヘルパーメソッドがある

モデルに対応したフォーム 単純な入力項目
日付のみ date_select select_date
日時も含む datetime_select select_datetime

使い方

date_select(object_name, method, options = {}, html_options = {}) 

datetime_select(object_name, method, options = {}, html_options = {}) 

select_date(date = Date.current, options = {}, html_options = {}) 

select_datetime(datetime = Time.current, options = {}, html_options = {}) 

オプションの説明

オプションに関してはほぼ共通。

オプション 説明
:prefix => 'period' field名のprefix(接頭辞)。params[:prefix名]で値が取れるようになる。
:order => [:month, :year, :day] 表示順を指定する。デフォルトは年月日の順。
:date_separator => '/' 項目間の区切り。デフォルトは区切りなし。
:prompt => true 選択リストの一番上の表示について。個別の指定も可能。
:include_blank => true 選択リストの一番上をブランクにする。
:use_month_numbers => true 月を数字で表す。デフォルトはfalseで、"January"のように表示される。
:use_short_month => true 月を短縮して表す。"January"なら、"Jan"となる。
:start_year => Date.today.year 選択可能な年の範囲のを指定。デフォルトは現在マイナス5
:end_year => Date.today.year + 1 選択可能な年の範囲を指定。デフォルトは現在プラス5
:discard_year => true 年を非表示にする。discardは"捨てる"という意味。
:discard_month => true 月を非表示にする。
:discard_day => true 日を非表示にする。
<%= select_date Date.today,:prefix=>"period_to",:use_month_numbers => true %>
<!-- params[:period_to]で値を取得できる -->

入力した日付を維持する方法

日付を入力して、検索などをしたとき、その日付がフォームに残るようにしたいことは結構ある。
その時、select_dateと、select_datetimeの場合は、以下のようにすれば値を保持できる。
controllerで、

    if params[:date]
      year = params[:date][:year].to_i 
      month = params[:date][:month].to_i 
      day = params[:date][:day].to_i
    else
      year = Time.now.year.to_i
      month = Time.now.month.to_i
      day = Time.now.day.to_i
    end

    @date = Time.mktime(year,month,day)

として、日付の値をゲットする。

viewでは、

<% time = @date || Time.now() -%>

<%= select_date(time,
                {:use_month_numbers => true,
                 :start_year => Time.now.year - 1,
                 :end_year =>  Time.now.year + 1
                }) 
%>

とすれば値を保持できる。

参考

Railsレシピブック 183の技

Railsレシピブック 183の技


お読み頂きありがとうございます。
少しでもお役に立てたらクリックお願いします↓。

にほんブログ村 IT技術ブログ プログラム・プログラマへ人気ブログランキングへ Subscribe with livedoor Reader


◆◆このブログのサイトマップへ◆◆