こんにちは!スージーです!
久し振りにrailsでアプリ開発を開始したのでその際に使ったdatepicker
についてまとめ
datepickerとは
日付入力フォームを選択した時に表れるカレンダー
参考記事
結局、どのdatepickerが一番使い勝手がよいのかhttps://qiita.com/knt45/items/6d74f6785cd4547ae53b
Rails Application Build Guides
https://rails.densan-labs.net/form/datetime_register_form.html
pickadate.js
https://amsul.ca/pickadate.js/
pickadate-rails
https://github.com/veracross/pickadate-rails
準備
gem 'pickadate-rails'
でbundle install
//= require pickadate/picker 追記
//= require pickadate/picker.date 追記
//= require pickadate/picker.time 追記
//= require jquery_ujs
//= require_tree .
@import "pickadate/classic";
@import "pickadate/classic.date";
@import "pickadate/classic.time";
cssレイアウトはdefault
又はclassic
が選べるようになっている
Jsファイル
$(function() {
$( "#datepicker" ).pickadate(); // カレンダー表示のイベント
});
Jsはこれだけで使えるようになる。リファレンスには色々なレイアウトのカレンダーが用意されている。
turbokinksでイベント発火しない
jQueryあるあるですがturbolinksをtrueのままにしているとページをリロードしないとイベント発火しないので、今回は不要なので削除。application.js
,application.html.erb
のturbolinksに関するコードは削除。gem 'turbolinks'
も削除してbundle install
します。
contorollerのアクション作成
class datepickersController < ApplicationController
def new
@datepicker = Datepicker.new
end
def create
@datepicker = Datepicker.create(datepicker_params)
if @datepicker.save
redirect_to :root
else
render :new
end
end
private
def datepicker_params
params.require(:start_day).permit(:start_day).merge(user_id: current_user.id)
end
end
この辺はお決まりのnew/createアクションです
完成
カレンダーで日付を選択して登録できている事をパラメータを確認
Started POST "/start_days" for ::1 at 2020-01-03 12:50:13 +0900
Processing by StartDaysController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"4Ug39AI0MM0azF2XqNEcTOSQNjpNWQ+ovCSI7PFrPPatvEM8avbMZ6MII5JdxZnni+Hssbo7x6NTAjA0udiH7Q==", "datepicker"=>{"datepicker"=>"3 January, 2020"}, "commit"=>"登録"}
パラメータの値がちゃんとDBに保存されています
まとめ
日付の選択は何かを登録する場面で使う事が多いかと思いますし、年月日をそれぞれ入力するのはUI/UX的に煩雑になってしまいますが、datepickerを使えば便利になりますし、簡単に実装もできました。