【问题标题】:How to have a default value for datetime_field_tag in Rails如何在 Rails 中为 datetime_field_tag 设置默认值
【发布时间】: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 的回答更新。

【问题讨论】:

    标签: html ruby-on-rails view ruby-on-rails-5


    【解决方案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 标记。
      • 检查你是否遗漏了什么
      【解决方案3】:

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

      config/time_formats.rb

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

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

      Time.zone.today.to_s(:datetime_field)
      

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

      【讨论】:

        猜你喜欢
        • 2010-11-14
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 2013-11-11
        相关资源
        最近更新 更多