我有一個period欄位型別為 的記錄tsrange。我正在制作一個表單來創建它,我想繼續使用 rails 表單助手 - 我想知道是否有某種約定來設定范圍的日期begin和end?
在我看來:
<%= 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>
除了手動構建輸入之外,還有什么方法可以為這種范圍欄位型別構建輸入?謝謝!
uj5u.com熱心網友回復:
我認為您必須為這些值添加自定義 getter 和 setter:
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 型別),但希望這個想法(也許每個 getter/setter 的實作都不是正確的)對您有所幫助。
然后period_end并且period_begin應該在呈現表單時作業,并且應該在提交表單時設定屬性時作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389759.html
標籤:红宝石轨道 红宝石 活动记录 ruby-on-rails-7
下一篇:了解哈希副本在幕后的行為方式
