form_forやform_withの中で使えるヘルパーメソッドで
よく見る日付や時刻をプルダウンで選択できるフォームを簡単に作ることができる、
date_selectを使用してみました。
こんな感じ。
コードは以下(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分間隔だとこうなる
他にも色々とオプションが有り、リファレンスに結構詳しく載っていました
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)
-------------------------------------
私がこれまでの学習で読んだ本をこちらにまとめています。※随時更新
転職の時に使って良かったサイト・おすすめのサイトを紹介しています