Rails 3,仅查看日期格式?

时间:2013-02-05 22:41:00

标签: 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"

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

>> 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

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

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

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

我已经为具有异常处理的视图提供了自定义方法l_or_none。

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

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

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

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

2 个答案:

答案 0 :(得分: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"

在视图中:

<%= 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

答案 1 :(得分:0)

试试这个,也许事情会好的:

User.find_by_created_at(DateTime.now)