在rails 4中设置date_field的默认值

时间:2013-09-18 08:42:01

标签: ruby-on-rails

我的应用程序中有一些表单,其中使用date_select并且我刚刚更改为使用date_field(使用HTML5表单元素)我唯一的问题是{ {1}}默认为今天的日期,这对我们来说非常合适,但date_select默认为date_field

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

是否可以将dd/mm/yyyy默认为今天?

8 个答案:

答案 0 :(得分:20)

如果您通过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') %>

答案 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.todayhttps://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对象。

  1. 我使用了像Safari这样的浏览器的占位符来引导他们在呈现为文本字段时进行正确的格式化。
  2. 此外,如果该值已存在(例如您在#edit操作中),则需要使用该值
  3. 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;