gpt4 book ai didi

ruby-on-rails - 使用 simple_form 在 ruby​​ on rails 上填充自定义时间字段

转载 作者:行者123 更新时间:2023-12-04 17:10:49 24 4
gpt4 key购买 nike

我是 ruby​​ 和 ruby​​ on rails 的初学者,我正在尝试使用 simple_form 创建一个复杂的表单。一切都已经开始工作,但我想以一种非常具体的方式自定义“时间”字段。

当我使用:

<%= f.input :hour %>

它呈现两个选择字段,“小时”字段填充了 00 到 23 的选项,“分钟”字段填充了 00 到 59 的选项。

但这不是我想要的。我想用带有自定义预填充选项的单个选择字段替换时间的两个选择字段的使用,时间范围从上午 8 点到下午 22 点,以 15 分钟为增量,并且还有选项的文本显示时间语法“8h00”、“8h15”、“8h30”、“8h45”、“9h00”、“18h00”、“18h15”、“18h30”、“18h45”等。“21h45”是最后一个可用选项。

我设法使用以下选项对其进行了更多自定义:
<%= f.input :hour, :as => :time, :minute_step => 15 %>

尽管这解决了 15 分钟增量问题,但它仍然呈现两个选择字段。

这将是我想要为我呈现 simple_form 的 html 等价物:
<select name="hour">
<option value="08:00:00">08h00</option>
<option value="08:15:00">08h15</option>
<option value="08:30:00">08h30</option>
<option value="08:45:00">08h45</option>
...
<option value="21:30:00">21h30</option>
<option value="21:45:00">21h45</option>
</select>

我很确定这很容易使用从 8..21 循环然后再次循环使用“00”、“15”、“30”和“45”的集合来实现,然后以语法输出选项我想要(小时+“h”+分钟)。

我想创建一个自定义的“日期”字段,因为单个表单中有许多日期字段(对于我正在创建的“约会”相关应用程序),但由于我是 ruby​​ on rails 的初学者,我我真的不知道什么是实现这一点的最聪明的方法。我不确定是否应该在 simple_form 中实现自定义字段,是否应该使用辅助函数,或者什么。

最佳答案

在 Carlos Antonio da Silva 的帮助下,从 simpleform 的邮件列表中,我们通过创建一个像这样的自定义输入来解决这个问题:

应用程序/输入/hour_input.rb

class HourInput < SimpleForm::Inputs::Base
def input
@builder.select(attribute_name, hour_options, { :selected => selected_value }, { :class => "input-medium" })
end

private

# The "Selecione..." string could also be translated with something like: I18n.t("helpers.select.prompt')
def hour_options
hour = [['Selecione...', '00:00:00']]
(8..21).each do |h|
%w(00 15 30 45).each do |m|
hour.push ["#{h}h#{m}", "#{"%02d" % h}:#{m}:00"]
end
end
hour
end

def selected_value
value = object.send(attribute_name)
value && value.strftime("%H:%M:%S")
end
end

然后 <%= f.input :hora, :as => :hour %>在 View 中。

关于ruby-on-rails - 使用 simple_form 在 ruby​​ on rails 上填充自定义时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14490355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com