如何在Ruby on Rails中格式化日期和/或时间输入?

时间:2012-08-26 09:24:41

标签: ruby-on-rails forms formatting ruby-on-rails-3.2

这个问题几乎与此相同:

除了最佳答案对我不起作用。我是Ruby和RoR的新手,所以我不知道我到底做了什么。这是我到目前为止所拥有的。

我在en.yml中添加了默认的日期和时间格式:

en:
  date:
    formats:
      default: '%d.%m.%Y'
  time:
    formats:
      default: '%H:%M'

我还添加了一个新的初始化程序,其代码如下:

Date::DATE_FORMATS[:default] = '%d.%m.%Y'
Time::DATE_FORMATS[:default] = '%H:%M'

当我转到rails控制台并执行Time.now.to_sDate.today.to_s时,我得到了正确的结果。当从数据库中获取并显示在模型索引页面上时,这些也会正确显示。

但是,当我尝试创建一个带有一些日期和时间字段的表单(而不是日期时间!)时,我会得到适合日期的旧YYYY-MM-DD,以及时间的整个YYYY-MM-DD HH:mm:ss.nnnnnn

正确格式化这些输入值的最佳做法是什么?我想避免在视图中更改任何内容(比如它已完成here),并在应用程序级别上正确解决 - 如果可能的话。

1 个答案:

答案 0 :(得分:3)

这就是我最终做的事情:

首先,我在模型中定义了一个自定义字段:

  attr_accessible :entry_date_formatted

  def entry_date_formatted
    self.entry_date.strftime '%d.%m.%Y' unless self.entry_date.nil?
  end

  def entry_date_formatted=(value)
    return if value.nil? or value.blank?
    self.entry_date = DateTime.strptime(value, '%d.%m.%Y').to_date
  end

然后我将表单从entry_date更改为entry_date_formatted

<%= form.text_field :entry_date_formatted, :placeholder => 'Date' %>

最后但同样重要的是,我已将相关字段添加到我的语言环境文件中:

en:
  activerecord:
    attributes:
      time_entry:
        entry_date_formatted: Entry date
        start_time_formatted: Start time
        end_time_formatted: End time

这可能不是最好的方式,但现在它对我很有好处。