如何在 Rails 中为 datetime_field_tag 设置默认值

Posted

技术标签:

【中文标题】如何在 Rails 中为 datetime_field_tag 设置默认值【英文标题】:How to have a default value for datetime_field_tag in Rails 【发布时间】:2017-05-22 13:28:49 【问题描述】:

在我看来,我正在尝试为datetime_field_tag 设置一个默认值:

=form_tag form_path, method: :get do
  =label_tag :sign_up_at, 'Sign up before:'
  =date_field_tag :sign_up_at, (params[:sign_up_at] || 
                               Time.zone.today.strftime("%Y-%m-%d"))

  =label_tag :last_seen_at, 'Last seen after:'
  =datetime_field_tag :last_seen_at, (params[:last_seen_at] || 
                                     Time.zone.now.strftime("%d-%m-%YT%H:%M"))

  =submit_tag 'Filter', class: 'btn-info'

这导致在 html 中有一个value 标记:

<input type="datetime-local" name="last_seen_at" id="last_seen_at" value="22-05-2017T16:34">

我的猜测是,我在解析 Time 时遇到了某种问题。有人可以帮忙吗?谢谢!

根据@deephak 的回答更新。

【问题讨论】:

【参考方案1】:

只是为了补充这里的另一个答案:datetime_field_tag 助手对给它的日期时间格式很敏感。例如,如果日、月和年的顺序错误,则该值将不会显示在表单输入中(并且如果您打开了开发者控制台,则会显示警告消息)。

这可能取决于您的语言环境,但 OP 的 "%d-%m-%YT%H:%M" 格式字符串的年份和日期是相反的。 "%Y-%m-%dT%H:%M" 似乎在我的试验中修复了它。

【讨论】:

【参考方案2】:

您正在使用today,它只会给您date 而不是时间。

因此,当您尝试获取过期时间时,rails 将返回 00:00

示例:

Time.zone.today
#=> Mon, 22 May 2017

Time.zone.now
#=> Mon, 22 May 2017 09:34:57 EDT -04:00

要解决这个问题,请更改

Time.zone.today.strftime("%d-%m-%YT%H:%M")
#=> "22-05-2017T00:00"

Time.zone.now.strftime("%d-%m-%YT%H:%M")
#=> "22-05-2017T09:33"

# OR

Time.current.strftime("%d-%m-%YT%H:%M")
#=> "22-05-2017T09:33"

【讨论】:

谢谢!这样就解决了时间不正确但还是看不到默认值的问题。 您可以尝试删除params[:last_seen_at] 一次 尝试按照您的建议删除参数,但仍然无法在浏览器中看到默认值,只能作为value 标记。 它应该可以工作apidock.com/rails/v4.0.2/ActionView/Helpers/FormTagHelper/… 检查你是否遗漏了什么【参考方案3】:

上面的答案是正确的,但是如果你想重构这个,你可以设置一个时间格式初始化器。

config/time_formats.rb

Time::DATE_FORMATS[:datetime_field] = '%Y-%m-%dT%H:%M'

那么在设置值的时候可以使用:

Time.zone.today.to_s(:datetime_field)

请记住在更改初始化程序后重新启动您的rails s

【讨论】:

以上是关于如何在 Rails 中为 datetime_field_tag 设置默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 3.1 中为 CoffeeScript 使用选项“--bare”?

如何在 Rails 4 中为 AngularJS 更正设置根路由?

如何在 Rails 中为现有模型添加自动完成标记?

如何在 Rails 中为博客创建单独的管理界面

如何在 Rails 中为 collection_select 设置 HTML 选项?

Rails 4 - 如何在活动记录查询中为包含()和连接()提供别名