質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1439閲覧

date_fieldとtime_fieldの日付を同じにしたいです

zoff77

総合スコア19

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2021/02/14 07:48

下記の内容なカラムがあり、date_fieldにて日付を選択し、time_fieldで時刻を設定したのですが、登録したパラメーターを見ると、time_fieldの値が"2000-01-01"と選択していないデフォルトの日付の時間が登録されてしまいます。
この日付をdate_fieldで指定した日付にするにはどうしたら良いのでしょうか。

お忙しい中、お手数おかけしますがご教授頂けると幸いです。
宜しくお願い致します。

rb

1*schema.rb(一部)* 2 3 t.integer "user_id" 4 t.date "date_of_use" 5 t.time "start_time", null: false 6t.time "end_time", null: false

erb

1 2*該当部分* 3 4 <tbody class="table_modal"> 5 <td><%= f.date_field :date_of_use, class: "form-control"%></td> 6 <td><%= f.time_field :start_time ,class: "form-control"%></td>

rb

1 2*コントローラー(該当部分)* 3 4def new 5 @user = User.find(current_user.id) 6 @reception = Reception.new 7 end 8 9private 10 11 def reception_params 12 params.require(:reception).permit(:date_of_use, :start_time, :end_time, :start_transfer, :end_transfer, :start_place, :end_place, :event, :remarks).merge(user_id: current_user.id) 13 end 14
登録成功時のパラメーター app/controllers/users/receptions_controller.rb:20 Reception Create (2.6ms) INSERT INTO "receptions" ("user_id", "date_of_use", "start_time", "end_time", "start_transfer", "end_transfer", "start_place", "end_place", "event", "remarks", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["user_id", 4], ["date_of_use", "2021-02-15"], ["start_time", "2000-01-01 09:00:00"], ["end_time", "2000-01-01 18:00:00"], ["start_transfer", 1], ["end_transfer", 1], ["start_place", "1"], ["end_place", "1"], ["event", 1], ["remarks", ""], ["created_at", "2021-02-14 16:45:02.998076"], ["updated_at", "2021-02-14 16:45:02.998076"] ↳ app/controllers/users/receptions_controller.rb:20

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どうして 時刻だけfield って無いんでしょうかね、日付がそれも全く関係ない日付が付いてくるので、、、、

で、
datetime にして datetime_select みたいに日付部と時刻部を復数の入力fieldにする方法があります。

date_of_use, start_time, end_time に分けて入力し、日付を合わせるには、controllerにて計算することになるかと。
一番直感的なのは、文字になおしてから日時に戻す
start_time = Time.parse(date_of_use.strftime("%Y/%m/%d")+start_time.strftime(" %H:%M:%S"))
文字列にするのは業腹なら、日付の差だけ修正する
start_time += date_of_use.to_time - start_time.beginning_of_day

投稿2021/02/16 11:59

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zoff77

2021/02/17 01:54

ご回答頂きまして、ありがとうございます。 ”datetime_select みたいに日付部と時刻部を復数の入力fieldにする方法”につきましては、 date_of_use, start_time, end_timeの入力フィールドを全てdatetime_selectにして、 start_time, end_timeのフィールドはdiscardオプションにて時刻入力のみにするという解釈でよろしいでしょうか。
winterboum

2021/02/17 09:29

ん〜〜〜〜 それやったこと無いな。 それだとどういう日付になるか知って居ません。 start_time、 end_timeを日付付きで入力してもらうといういめーじでした。 date_of_useはなしにする。もしくは controllerにて 日付部を抜き出す。
zoff77

2021/02/17 13:38

ありがとうございます。 なるほどです。日付つきで入れるのですね! winterboum様のご教授頂いた内容で試みてみます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問