【问题标题】:How to output a different date format. Rails如何输出不同的日期格式。导轨
【发布时间】:2013-09-18 21:07:16
【问题描述】:

我正在使用 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。

【问题讨论】:

  • 您是将日期保存为数据库中的字符串还是日期?
  • 当您说“没有完成这项工作”时,您的意思是它没有按预期工作或出现错误?如果是这样,错误是什么?
  • 在任何情况下,您都应该考虑使用draper 或任何其他表示层概念,而不是在模型中添加日期格式代码。 railscasts.com/episodes/286-draper
  • 在 Postgres 中保存为日期

标签: ruby-on-rails postgresql datetime


【解决方案1】:

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

# environment.rb :

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(
     :default => "%d %B %Y"
)

【讨论】:

  • environment.rb:7:in `': 未初始化的常量 ActiveSupport::CoreExtensions (NameError)
【解决方案2】:

检查日期是否以字符串形式存储在数据库中。

尝试生成迁移并确保您有一个日期列,类似于这样

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

这样,你就可以使用 strftime 来格式化它,就像你上面提到的那样。

【讨论】:

  • 在PostgreSQL中保存为日期
【解决方案3】:

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

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

# in your model
def start_date
  self[:start_date].strftime("%D %m %Y")
end

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 2015-04-06
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多