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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

0回答

956閲覧

time_selectで空欄を選択すると、00:00が出力されてしまいます

RThe

総合スコア25

Ruby on Rails 5

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2020/09/27 14:29

編集2020/09/28 00:05

現在、タイムカードアプリを作成しております。
下記のスクショのように、日毎の出勤と退勤時刻を入力し、「編集を保存する」を押すと1ヶ月の勤務時間が反映される内容です。
出勤日以外は、空欄のまま出力したいのですが、空欄のまま「編集を保存する」を押すと自動的に「00:00」となってしまい、
出社したことになってしまいます。
空欄をそのまま反映するにはtime_selectをどの様にしたら良いのでしょうか。
お忙しい中、お手数おかけしますが、教えていただけると幸いです。

*タイムカード1月更新ページ(白紙)*

イメージ説明

*タイムカード1月更新ページ(空白のまま保存)*
イメージ説明

・モデル→attendance
・カラム→started_at(出勤時刻),finished_at(退勤時刻),note(備考)

*edit_one_month_html.erb*

erb

1<td><%= attendance.time_select :started_at, {include_blank: true}, {class: "form-control bootstrap-date-only-width"} %></td> 2<td><%= attendance.time_select :finished_at, {include_blank: true}, {class: "form-control bootstrap-date-only-width"} %></td>

*attendances_controller*

rb

1 def edit_one_month 2 end 3 4 def update_one_month 5 ActiveRecord::Base.transaction do # トランザクションを開始します。 6 attendances_params.each do |id, item| 7 attendance = Attendance.find(id) 8 attendance.update_attributes!(item) 9 end 10 end 11 flash[:success] = "1ヶ月分の勤怠情報を更新しました。" 12 redirect_to user_url(date: params[:date]) 13 rescue ActiveRecord::RecordInvalid # トランザクションによるエラーの分岐です。 14 flash[:danger] = "無効な入力データがあった為、更新をキャンセルしました。" 15 redirect_to attendances_edit_one_month_user_url(date: params[:date]) 16 end 17 18 19 20private 21 # 1ヶ月分の勤怠情報を扱います。 22 def attendances_params 23 params.require(:user).permit(attendances: [:started_at, :finished_at, :note])[:attendances] 24 end 25 end 26

*schema*

rb

1class CreateAttendances < ActiveRecord::Migration[5.2] 2 def change 3 create_table :attendances do |t| 4 t.date :worked_on 5 t.datetime :started_at 6 t.datetime :finished_at 7 t.string :note 8 t.references :user, foreign_key: true 9 10 t.timestamps 11 end 12 end 13end 14

*attendaceモデルファイル*

rb

1class Attendance < ApplicationRecord 2 belongs_to :user 3 4 validates :worked_on, presence: true 5 validates :note, length: { maximum: 50 } 6 7 validate :finished_at_is_invalid_without_a_started_at 8 validate :started_at_than_finished_at_fast_if_invalid 9 10 def finished_at_is_invalid_without_a_started_at 11 errors.add(:started_at, "が必要です") if started_at.blank? && finished_at.present? 12 end 13 14 def started_at_than_finished_at_fast_if_invalid 15 if started_at.present? && finished_at.present? 16 errors.add(:started_at, "より早い退勤時間は無効です") if started_at > finished_at 17 end 18 end 19end 20

宜しくお願い致します。

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

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

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

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

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

m.ts10806

2020/09/27 18:33

テーブル定義はどうなっているのでしょう。 初期値とかnullとか。
RThe

2020/09/28 00:06

情報足らずで、申し訳ございません。 承知いたしました! スキーマとモデルファイルを添付させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問