mysql の datetime フィールドを 2 つのフォーム フィールド (1) 日付のみ、(2) 時間のみに変換し、フォーム送信時に両方のフィールドを結合して datetime 形式に戻すにはどうすればよいですか?
これにより、次の gem を使用できるようになりますが、日付は単一の日時フィールドに格納されます。
gem 'bootstrap-datepicker-rails'
gem 'bootstrap-timepicker-rails'
前もって感謝します!
mysql の datetime フィールドを 2 つのフォーム フィールド (1) 日付のみ、(2) 時間のみに変換し、フォーム送信時に両方のフィールドを結合して datetime 形式に戻すにはどうすればよいですか?
これにより、次の gem を使用できるようになりますが、日付は単一の日時フィールドに格納されます。
gem 'bootstrap-datepicker-rails'
gem 'bootstrap-timepicker-rails'
前もって感謝します!
@Althafの助けを借りて解決策を見つけました
model.rbに仮想属性を追加しました。コールバックを
使用before_save
して日時に変換し直しました。
before_save :convert_to_datetime
def sched_date_field
sched_date.strftime("%d/%m/%Y") if sched_date.present?
end
def sched_time_field
sched_time.strftime("%I:%M%p") if sched_time.present?
end
def sched_date_field=(date)
# Change back to datetime friendly format
@sched_date_field = Date.parse(date).strftime("%Y-%m-%d")
end
def sched_time_field=(time)
# Change back to datetime friendly format
@sched_time_field = Time.parse(time).strftime("%H:%M:%S")
end
def convert_to_datetime
self.sched_time = DateTime.parse("#{@sched_date_field} #{@sched_time_field}")
end
Rails 4 を使用して、sched_date_field と sched_time_field を controller.rb のストロング パラメータに追加する必要がありました
_form.html.erbのフィールドは次のとおりです。
<%= f.label :sched_date_field, "Scheduled Date" %>
<%= f.text_field :sched_date_field, :class => "datepicker" %>
<%= f.label :sched_time_field, "Scheduled Time" %>
<%= f.text_field :sched_time_field, :class => "timepicker" %>
date_time_attribute gemを使用できます:
class MyModel < ActiveRecord::Base
include DateTimeAttribute
date_time_attribute :scheduled_at
end
schedule_at_date
とscheduled_at_time
別々に設定できるようになります。属性が設定されると、値が に結合されschedule_at
ます。