我的应用程序中有一些表单在使用date_select
并且我刚刚更改为使用date_field
(使用 HTML5 表单元素)我遇到的唯一问题是date_select
默认为今天的日期,这对我们来说是完美的,但date_field
默认为dd/mm/yyyy
反而。
我遇到了人们盲目提交表单并触发验证错误的问题。
可以默认date_field
到今天吗?
我的应用程序中有一些表单在使用date_select
并且我刚刚更改为使用date_field
(使用 HTML5 表单元素)我遇到的唯一问题是date_select
默认为今天的日期,这对我们来说是完美的,但date_field
默认为dd/mm/yyyy
反而。
我遇到了人们盲目提交表单并触发验证错误的问题。
可以默认date_field
到今天吗?
如果您通过 gem 安装 Rails4,它还存在以下错误。
修复上述问题,您可以像这样设置默认值
<%= f.date_field :birthday, :value => Time.now.strftime('%Y-%m-%d') %>
这将正确运行:
<%= f.date_field :birthday, :value => Time.now.strftime("%Y-%m-%d") %>
正如许多这些答案所暗示的那样,设置 :value 将覆盖为正在编辑的任何记录传入的值。如果表单仅用于新条目,这不是问题,但如果您想编辑表单中的记录,则有问题。正如 Michael 所建议的,解决此问题的一种方法是显式抓取现有对象。
我目前使用的解决方案是在 Controller 中,它在构建新记录时将值设置为今天。假设您的模型是 Person,并且您想要默认的值是 start_date:
def new
@person = Person.new(start_date: Date.current)
end
然后,您可以直接使用表单中的值而无需任何额外的麻烦。
f.date_field :start_date
您可以像这样设置默认的 date_field
date_field("user", "born_on", value: Time.now.to_s(:db))
这些选项都不适合我,尝试使用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.today
:https ://robots.thoughtbot.com/its-about-time-zones 。
f.date_field :birthday, :default=>Date.today.strftime("%d/%m/%Y")
对日期字段使用 Time 对象对我不起作用,我必须使用 Date 对象。
Rails 4 的结果视图代码:
<%= f.date_field :birthday, placeholder: "YYYY-MM-DD", value: (f.object.birthday || Date.today.to_s(:db)) %>
在 Rails 中,您还可以执行以下操作:' <%= f.date_field :birthday, :value => Date.today %>