我的应用程序中有一些表单,其中使用date_select
并且我刚刚更改为使用date_field
(使用HTML5表单元素)我唯一的问题是{ {1}}默认为今天的日期,这对我们来说非常合适,但date_select
默认为date_field
。
我遇到的问题是人们盲目地提交表单并触发验证错误。
是否可以将dd/mm/yyyy
默认为今天?
答案 0 :(得分:20)
如果您通过gem安装了Rails4,它还有以下错误。
修复上述内容,您可以像这样设置默认值
<%= f.date_field :birthday, :value => Time.now.strftime('%Y-%m-%d') %>
答案 1 :(得分:2)
您可以像这样设置默认的date_field
date_field("user", "born_on", value: Time.now.to_s(:db))
答案 2 :(得分:2)
这将正确运行:
<%= f.date_field :birthday, :value => Time.now.strftime("%Y-%m-%d") %>
答案 3 :(得分: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.today
:https://robots.thoughtbot.com/its-about-time-zones。
答案 4 :(得分:1)
f.date_field :birthday, :default=>Date.today.strftime("%d/%m/%Y")
答案 5 :(得分:1)
设置:值,正如许多这些答案所示,将覆盖为正在编辑的任何记录传入的值。如果表单仅用于新条目,则这不是问题,但如果要编辑表单中的记录,则不会出错。解决这个问题的一种方法是明确地抓住现有对象,迈克尔建议。
我目前使用的解决方案是在Controller中,它在构建新记录时将值设置为今天。假设您的模型是Person,并且您要默认的值是start_date:
def new
@person = Person.new(start_date: Date.current)
end
然后您可以只使用表单中的值而不会有任何额外的麻烦。
f.date_field :start_date
答案 6 :(得分:0)
使用Time对象作为日期字段对我来说不起作用,我不得不使用Date对象。
Rails 4的结果视图代码:
<%= f.date_field :birthday, placeholder: "YYYY-MM-DD", value: (f.object.birthday || Date.today.to_s(:db)) %>
答案 7 :(得分:0)
在Rails中,您还可以执行以下操作: &#39; &lt;%= f.date_field:birthday,:value =&gt; Date.today%&gt;