【问题标题】:Handling duration in Rails在 Rails 中处理持续时间
【发布时间】:2018-09-14 11:56:09
【问题描述】:

我有一个 Rails 5 应用程序,我正在其中构建一个锻炼计划器。其中一个字段是:duration

我想让用户输入锻炼的持续时间。理想情况下,我希望它是这样的:

输入字段应始终默认为 HH:MM:SS。

我最初的想法是使用 HTML input type="time",它的行为正确但无法加载,例如@workout.time 作为占位符;它总是看起来像--:--:--。

我要找的是timepicker吗?时间选择器的行为似乎像这样 23:59:59,而它应该能够像这样表现:35:11:01。我应该寻找哪些关键字?

这可以用一些简单的javascript来解决吗?

【问题讨论】:

  • 听起来您的占位符的问题在于您正在使用占位符。您希望在重新加载时该值位于该字段中,因此您应该将值而不是占位符设置为您保存的持续时间。

标签: javascript ruby-on-rails duration


【解决方案1】:

您可以使用 Rails 的 ActionView 表单助手和 time_field 元素来实现:

f.time_field :duration,
  value: f.object.duration&.strftime("%H:%M") || "%H:%M",
  min: 'hh:mm:ss',
  max: 'hh:mm:ss',

添加最小值和最大值会将默认格式从 HH:MM 更改为 HH:MM:SS。详情请见:https://guides.rubyonrails.org/form_helpers.html

【讨论】:

  • 这行不通,因为它会生成 HTML5 <input type="time"> - 这些用于选择一天中的某个时间,并以 24 小时为上限。 developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time
  • 如果我们假设 24 小时是可以接受的上限,那么这确实有效。唯一不适用的是:我输入了一个持续时间,它保存为锻炼.持续时间,当我再次加载页面时,锻炼.持续时间不显示为占位符值,它只是 --:-- 再次。无论如何要解决这个问题?如果可能的话,那就是解决方案!
  • 尝试将值设置为value: f.object. duration.strftime("%H:%M")。这假定持续时间是日期或时间列类型。如果它是一个整数,您可以将其转换为 Time.at(duration) 的时间,这将给出来自 Unix epoc 的时间。
  • 您对以上内容有何看法?
  • 谢谢大家。我正在尝试这个:= f.time_field :duration, class: 'form-control', value: f.object.Time.at(@workout.duration).strftime("%H:%M"), min : 'hh:mm:ss', max: 'hh:mm:ss', step: 2 但我收到以下错误:#<0x007ff946a38800>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2010-11-27
  • 2017-09-14
  • 2020-06-10
  • 2015-09-01
  • 2018-07-31
  • 2023-04-09
相关资源
最近更新 更多