3

我正在使用 Ruby On Rails 4 和 twitter-bootstrap-rails,客户希望以这种格式显示日期:

14 September 2013非常酷,我们开始:

    var start = $("#project_start_date").datepicker({
        格式:'dd MM yyyy',
        自动关闭:真
    })

但是,当日期保存到数据库时,它会保存为“2013-09-14”。很酷,但是当我想编辑页面时,我看到以下内容:

2013-09-14作为该领域的输出:(不好嘿。

那么如何以给定格式输出日期(我可能需要@start_date.stftime("%d %B %Y").

只想说,那:

  1. getter 方法没有完成这项工作:def start_date() @start_date.stftime("%d %B %Y") end
  2. before_validation 也没有做:
 
before_validation :date_validation

  def date_validation
    @start_date = self.start_date.strftime("%D %m %Y")
    @end_date = self.end_date.strftime("%d %m %Y")
  结尾

PS我正在使用Postgres。

4

3 回答 3

1

检查日期是否作为字符串存储在数据库中,就像它看起来的那样。

尝试生成迁移并确保您有一个日期列,如下所示

def change    
   change_column :table_name, :start_date, :datetime
   change_column :table_name, :end_date, :datetime
end

这样,您就可以使用 strftime 来格式化它,如上所述。

于 2013-09-14T06:41:44.413 回答
0

要更改日期在数据库中的保存格式,请将这段代码添加到environment.rb文件中。

# environment.rb :

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(
     :default => "%d %B %Y"
)
于 2013-09-14T06:31:38.437 回答
0

我决定通过回答来完成这个旧Q。

除了使用评论中提到的 draper 之外,最简单的方法是覆盖 AR getter,而不是在验证中,即

# in your model
def start_date
  self[:start_date].strftime("%D %m %Y")
end
于 2016-12-10T00:31:20.310 回答