【问题标题】:Rails 4 populate date_field from db on editRails 4 在编辑时从 db 填充 date_field
【发布时间】:2016-06-28 16:24:00
【问题描述】:

对此有很多问题,但似乎没有一个能解决我的问题。似乎无法在编辑时从数据库中正确填充 date_field。我认为一个问题可能在于我的数据库被序列化并且日期被存储为字符串。

我尝试修改 en.yml 并本地化此问题中的信息:Rails date format in form field

#en.yml
  date:
    formats:
      default: "%d/%m/%Y"

那么在我看来

#edit.html.erb
<%= person.label :dob, "Date of Birth" %>
<%= person.date_field :dob, as: :date, value: l(@request.person[:dob].to_date, format: :default), required: true %>

从控制台我可以说 Request.first.person[:dob].to_date 来获取像 Wed, 05 Mar 1986 这样的日期对象,但它仍然不会填充该字段。

任何指导将不胜感激,谢谢。

【问题讨论】:

    标签: ruby-on-rails date ruby-on-rails-4 datefield


    【解决方案1】:

    要让格式化程序工作,您需要向它传递一个有效的 Date 对象。您提到日期在数据库中存储为字符串,而字符串是格式化程序作为输入的内容。

    一种处理方法是覆盖模型中的属性读取器或添加另一种方法,将值作为 Date 的实例返回。

    class Person < ActiveRecord::Base
      ...
      def date_field
        read_attribute(:date_field).to_s.to_date
      end    
    end
    

    【讨论】:

    • 所以 date_field 是(阅读:应该是)通过我使用value: l(@request.person[:dob].to_date接收一个有效的日期对象
    • 对,我没有仔细阅读你的问题,对不起。您是否尝试在 date_field 行之前的断点处停止以查看实际的 @request.person[:dob] 对象是什么样的?
    • 是的,它以“Y%-m%-d%”的顺序作为字符串返回。当使用 .to_date 击中它时,它会以 Wed, 05 Mar 1986 作为日期对象返回。
    猜你喜欢
    • 2016-09-23
    • 1970-01-01
    • 2011-03-20
    • 2016-02-05
    • 2014-09-27
    • 2012-10-08
    • 2017-09-25
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多