在rails 4中设置date_field的默认值

Arc*_*ath 13 ruby-on-rails

我在我的应用程序中有一些表单,其中使用date_select和我刚刚更改为使用date_field(使用HTML5表单元素)我唯一的问题是date_select默认为今天的日期对我们来说是完美的但是date_field默认为dd/mm/yyyy代替.

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

是否有可能默认date_field为今天?

小智 20

如果你通过gem安装了Rails4,它还有bug.

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') %>
Run Code Online (Sandbox Code Playgroud)

  • 在Rails 5x中没有这样的错误.以上格式工作正常. (4认同)

Jem*_*ima 6

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

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

def new
    @person = Person.new(start_date: Date.current)
end
Run Code Online (Sandbox Code Playgroud)

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

f.date_field :start_date
Run Code Online (Sandbox Code Playgroud)