17

我的应用程序中有一些表单在使用date_select并且我刚刚更改为使用date_field(使用 HTML5 表单元素)我遇到的唯一问题是date_select默认为今天的日期,这对我们来说是完美的,但date_field默认为dd/mm/yyyy反而。

我遇到了人们盲目提交表单并触发验证错误的问题。

可以默认date_field到今天吗?

4

8 回答 8

25

如果您通过 gem 安装 Rails4,它还存在以下错误。

https://github.com/rails/rails/commits/master/actionview/lib/action_view/helpers/tags/datetime_field.rb

修复上述问题,您可以像这样设置默认值

<%= f.date_field :birthday, :value => Time.now.strftime('%Y-%m-%d') %>
于 2013-10-10T04:14:49.357 回答
3

这将正确运行:

<%= f.date_field :birthday, :value => Time.now.strftime("%Y-%m-%d")  %>
于 2014-01-10T11:09:05.807 回答
3

正如许多这些答案所暗示的那样,设置 :value 将覆盖为正在编辑的任何记录传入的值。如果表单仅用于新条目,这不是问题,但如果您想编辑表单中的记录,则有问题。正如 Michael 所建议的,解决此问题的一种方法是显式抓取现有对象。

我目前使用的解决方案是在 Controller 中,它在构建新记录时将值设置为今天。假设您的模型是 Person,并且您想要默认的值是 start_date:

def new
    @person = Person.new(start_date: Date.current)
end

然后,您可以直接使用表单中的值而无需任何额外的麻烦。

f.date_field :start_date
于 2016-11-02T15:01:31.137 回答
2

您可以像这样设置默认的 date_field

date_field("user", "born_on", value: Time.now.to_s(:db))
于 2013-09-18T08:49:24.330 回答
2

这些选项都不适合我,尝试使用date_field_tag.

起作用的是传递这样的值:

date_field_tag(:my_thing_end_date, :end_date, value: Date.current.strftime('%Y-%m-%d')

来自文档(http://apidock.com/rails/v4.0.2/ActionView/Helpers/FormHelper/date_field

默认值是通过尝试在对象的值上调用“to_date”生成的,这使得它的行为与 DateTime 和 ActiveSupport::TimeWithZone 实例的预期相同。

因此,将日期作为用户输入的字符串传递似乎是解决方案。

此外,根据有关日期和时区的良好信息,Date.current最好是Time.todayhttps ://robots.thoughtbot.com/its-about-time-zones 。

于 2016-12-12T22:37:52.913 回答
1
f.date_field :birthday, :default=>Date.today.strftime("%d/%m/%Y")
于 2015-06-25T13:56:08.860 回答
0

对日期字段使用 Time 对象对我不起作用,我必须使用 Date 对象。

  1. 如果将其呈现为文本字段,我为 Safari 等浏览器使用了占位符来引导它们进行正确的格式设置。
  2. 此外,如果该值已经存在(例如当您在 #edit 操作中时)它需要使用该值来代替

Rails 4 的结果视图代码:

<%= f.date_field :birthday, placeholder: "YYYY-MM-DD", value: (f.object.birthday || Date.today.to_s(:db)) %>
于 2015-04-09T14:14:16.423 回答
-1

在 Rails 中,您还可以执行以下操作:' <%= f.date_field :birthday, :value => Date.today %>

于 2015-11-19T22:31:52.320 回答