12

mysql の datetime フィールドを 2 つのフォーム フィールド (1) 日付のみ、(2) 時間のみに変換し、フォーム送信時に両方のフィールドを結合して datetime 形式に戻すにはどうすればよいですか?

これにより、次の gem を使用できるようになりますが、日付は単一の日時フィールドに格納されます。

gem 'bootstrap-datepicker-rails'
gem 'bootstrap-timepicker-rails'

前もって感謝します!

4

4 に答える 4

16

@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" %>
于 2013-08-27T12:00:05.787 に答える
6

date_time_attribute gemを使用できます:

class MyModel < ActiveRecord::Base
  include DateTimeAttribute

  date_time_attribute :scheduled_at
end

schedule_at_datescheduled_at_time別々に設定できるようになります。属性が設定されると、値が に結合されschedule_atます。

于 2013-12-01T21:43:33.590 に答える