箱のプログラミング日記。

渋谷の自社開発企業でRails書いてます。

date_selectの使い方【Rails】

f:id:y_hakoiri:20191102121915j:plain

form_forやform_withの中で使えるヘルパーメソッドで

よく見る日付や時刻をプルダウンで選択できるフォームを簡単に作ることができる、

date_selectを使用してみました。

 

https://i.gyazo.com/a558d57df5fb7599c9a95cdf53bc181a.png

こんな感じ。

 

コードは以下(form_forは省略)

= f.date_select :date, {include_blank: true, discard_year: true, use_month_numbers: true}, {class: 'time-box'}

 

= f.time_select :time, {include_blank: true, start_hour: 10, end_hour: 20, minute_step: 15}, {class: 'time-box'}

 

{}の中はオプションなので順に見ていきます

 

include_blank: true

デフォルト値を上の画像のようにブランクにしてくれます

 

discard_year: true

デフォルトだとdate_selectの場合は年、月、日のプルダウンが作成されますが

discardすることで非表示にしてくれます

 

use_month_numbers: true

デフォルトだと月の表現がjune,julyなど英語表記になっているので

それを数字表記に変えてくれます

 

start_hour: 10

デフォルトだとhourは1~24まで全て表示されていますが、

開始の数値を指定することができます。

end_hour:

の場合も同様に、何時まで表示させるかを指定するものです。

 

ちなみにここで

表示される月が1~12月ではなく、数ヶ月だけにしたいな〜と思い

start_month: とやってみましたが、反映されませんでした。

 

minute_step: 15

デフォルトだとminuteは1~60まで表示されていますが、

stepを指定することで引数の分単位に変更することができます

 

ちなみに15分間隔だとこうなる

f:id:y_hakoiri:20190726213941p:plain

 

他にも色々とオプションが有り、リファレンスに結構詳しく載っていました

 

date_select - リファレンス - - Railsドキュメント

time_select - リファレンス - - Railsドキュメント

 

日付と時刻を分けずに合わせて表示させたい場合は、datetime_selectもありますね

datetime_select - リファレンス - - Railsドキュメント

 

 

ちなみに、リファレンスにも書いてある通り

form_forやform_withの中で使うこれらのヘルパーには引数の置き方にルールがあり、

f.date_select(プロパティ名 [, オプション])

こういう風にしなきゃいけないと。

ただリファレンスのこれはものすごくわかりづらい・・・汗

 

 

ここでいうプロパティ名とは実際はカラムにあたります

= f.date_select :date, {include_blank: true, discard_year: true, use_month_numbers: true}, {class: 'time-box'}

 

= f.date_select :第一引数, 第二引数, 第三引数

が正しい書き方です。

 

よくある間違いとして、ヘルパーのオプションであるinclude_blank: trueとかと一緒にhtmlのオプションであるclassとかを書いてしまってエラーになるってことがありますが(何度もこれでつまづいた)

 

  • ヘルパーのオプションとhtmlオプションは混同させてはいけない
  • 引数にもてる数は決まっている=それぞれを{}で囲い、大きな一つの引数として認識させる

 

というのが大前提だと思います。

 

hamlならではのミスだとは思いますが、ググってると予測変換で class 付け方 みたいなのをよく見るので

みんな同じようにつまづいてるのかなーと思います。

それにしては、{}で囲えば良いらしい、みたいな記事が多く

引数の認識までしっかり書かれている記事がなかったため、自分も理解するまですごく時間がかかりました。

(最初からリファレンスに書いてくれれば良いのにw)

 

 ------------------------------------- 

 

私がこれまでの学習で読んだ本をこちらにまとめています。※随時更新

www.y-hakopro.com

 

転職の時に使って良かったサイト・おすすめのサイトを紹介しています

www.y-hakopro.com