Rails 3,仅查看日期格式?

all*_*kim 6 ruby-on-rails-3

我需要以本地化格式显示日期.即12/31/2013

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

Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
Run Code Online (Sandbox Code Playgroud)

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

>> 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
Run Code Online (Sandbox Code Playgroud)

当然,我可以更改所有模型以使用所有日期或日期时间搜索来使用Date类或DateTime类而不是字符串.但是,如果我们可以应用仅查看日期格式或仅查看时间格式,我很好奇.

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

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

对于具有异常处理的视图,我已经有自定义方法l_or_none.

def l_or_none(object)
  l(object) rescue ''
end  
Run Code Online (Sandbox Code Playgroud)

我只是不想在整个视图中重复这个方法,并寻找一种方法,"如果在视图中调用Date#to_s,以这种方式格式化",而不使用我自己的方法.

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

"如果在视图下使用此对象,则以这种方式覆盖方法"

Vik*_*kko 18

您可以使用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"
Run Code Online (Sandbox Code Playgroud)

在视图中:

<%= l(@entry.created_at) %>
<%= l(@entry.created_at, :format => :short) %>
<%= l(@entry.created_at, :format => :notime) %>
Run Code Online (Sandbox Code Playgroud)

结果:

02/13/2013 15:24
15:24
02/13/2013
Run Code Online (Sandbox Code Playgroud)

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