Помощник формы Rails для типа tsrange
У меня есть запись с
period
поле типа
tsrange
. Я создаю форму для ее создания, и я хотел бы продолжать использовать помощники форм rails - мне было интересно, есть ли какое-то соглашение для установки даты для диапазона и?
На мой взгляд, это:
<%= form_with(model: @record) do |record_form| %>
<%= record_form.datetime_local_field :period %>
<% end %>
Приводит к ошибке
undefined method 'strftime' for Mon, 01 Jan 1996 09:00:00 +0000..Mon, 01 Jan 1996 17:00:00 +0000:Range
Это имеет смысл, поскольку я не могу напрямую создать один вход для диапазона, но, похоже, нет никакого способа распаковать атрибут диапазона в его
begin
и
end
методы с чем-то вроде
<%= record_form.datetime_local_field :period_begin %>
Поскольку эти ошибки с
undefined method 'period_begin' for #<ShiftPeriod id: nil, shift_pattern_id: nil, period: Mon, 01 Jan 1996 09:00:00 +0000..Mon, 01 Jan 1996 17:00:00 +0000, created_at: nil, updated_at: nil>
Есть ли какой-либо способ, кроме создания входных данных вручную, для этого типа поля диапазона? Спасибо!
1 ответ
Я думаю, вам придется добавить пользовательские геттеры и сеттеры для этих значений:
def period_begin
# using read_attribute because I'm redefining the `period` getter at the end
@period_begin = read_attribute(:period)&.begin
end
def period_end
@period_end = read_attribute(:period)&.end
end
def period_begin=(value)
@period_begin = value
end
def period_end=(value)
@period_end = value
end
def period
period_begin..period_end if period_begin && period_end
end
Не уверен на 100% в этом (я никогда не использовал тип tsrange), но надеюсь, что идея (возможно, реализация каждого геттера/сеттера неверна) вам поможет.
затем
period_end
а также
period_begin
должно работать при рендеринге формы и должно работать при установке атрибутов при отправке формы.