Найдено решение с помощью от @Althaf
Добавлено виртуальные атрибуты model.rb Используется before_save
обратного вызова для преобразования обратно в DateTime.
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 строгим Params в 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" %>
По строгим параметрам, вы имеете в виду «сильные параметры»? Кроме того, этот код, похоже, вызывает неопределенную ошибку переменной в sched_time. –
Это немного кромка, но если вы используете эту технику и требуете какой-либо проверки в поле «sched_time», она не удастся. Вы можете попробовать изменить 'before_save' на' before_validation'. Но опять же, это может завершиться неудачно, если у вас есть каскадные проверки. Немного трудно объяснить в этом коротком комментарии, но поверьте мне, это провалится. – Karl
@ Karl, что вы рекомендуете вместо этого? Я сталкиваюсь с этой проблемой.Я думаю об изменении модели данных для хранения даты, времени и часового пояса в виде трех отдельных полей. – Turgs