Помощник формы 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должно работать при рендеринге формы и должно работать при установке атрибутов при отправке формы.

Другие вопросы по тегам