【问题标题】:Rails 3, View only date format?Rails 3,仅查看日期格式?
【发布时间】:2013-02-05 22:40:59
【问题描述】:

我需要以本地化格式显示日期。即 2013 年 12 月 31 日

因此,我在 config/initializers/datetime_formats.rb 中将默认日期格式设置为该格式

Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"

但是,我的测试在单元测试中失败了,因为某些搜索是基于日期格式的。例如

>> User.find_by_created_at("#{DateTime.now}")
User Load (2.7ms)  SELECT `users`.* FROM `users` 
WHERE `users`.`created_at` = '02/04/2013 14:43' LIMIT 1

当然,我可以将所有模型更改为使用所有日期或日期时间搜索以使用日期类或日期时间类而不是字符串。但是,我很好奇我们是否可以应用仅查看日期格式或仅查看时间格式。

有没有办法应用仅供查看的日期(或时间)格式?

----- 编辑-----

我已经有自定义方法 l_or_none 用于具有异常处理的视图。

def l_or_none(object)
  l(object) rescue ''
end  

我只是不想在所有视图中重复此方法,并寻找一种方法,“如果在视图中调用 Date#to_s,则以这种方式格式化”,而不使用我自己的方法。

为什么我们没有这样的概念?

"如果在view下使用这个对象,就这样覆盖方法"

【问题讨论】:

  • 您可以在视图中添加一些方法来显示您的本地化格式,而无需接触您的初始化程序。这是你需要的吗?

标签: ruby-on-rails-3


【解决方案1】:

你可以使用rails的本地化:

config/locales/en-US.yml

date:
  formats:
    default: "%m/%d/%Y"
    short: "%m/%d"
datetime:
  formats:
    default: "%m/%d/%Y %H:%M"
    short: "%H:%M"
    notime: "%m/%d/%Y"

在视图中:

<%= l(@entry.created_at) %>
<%= l(@entry.created_at, :format => :short) %>
<%= l(@entry.created_at, :format => :notime) %>

结果:

02/13/2013 15:24
15:24
02/13/2013

http://guides.rubyonrails.org/i18n.html

【讨论】:

  • @bighostkim 绝对是这个。您不应该在应用程序范围内覆盖默认日期格式;相反,您的视图应该明确请求适合特定日期呈现的格式,这不一定在所有视图中甚至在同一个视图中都相同。
  • 我只是不想在所有视图中重复调用 l 方法 all 方法,我太懒了?
  • 没有设置在所有模型日期时间上使用本地化,我也不建议覆盖 => 这些方法会改变很多轨道的东西,并会导致无法定义的结果和奇怪行为..修复这些会花费你很多时间,所以这是一种懒惰的方式;)
  • 你肯定很懒:)
【解决方案2】:

试试这个,也许一切都会好起来的:

User.find_by_created_at(DateTime.now)

【讨论】:

    猜你喜欢
    • 2011-02-26
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多