2013-02-05 14 views
6

日付をローカライズされた形式で表示する必要がありました。 2013年12月31日Rails 3、日付形式のみを表示しますか?

すなわちそのため、私はいくつかの検索が基づいているので、しかし、私のテストは、ユニットテストに失敗した構成/初期化子/ 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 

私は、すべてのビューの上に、この方法を繰り返したい、と私自身の方法を使用せずに、途中、「日付#のto_sがビューに呼び出された場合、この方法をフォーマット」を探していません。

なぜこのような概念はありませんか?

"このオブジェクトはビューの下で使用されている場合は、このようにオーバーライドメソッド"

+0

あなたの初期化子を触れることなく、あなたのローカライズされたフォーマットを示すために、あなたのビューでいくつかのメソッドを追加することができます。それはあなたが必要とするものですか? – Vinay

答えて

18

あなたはレールの局在使用することができます

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

+0

@bighostkim確かにこれ。アプリケーション全体のデフォルトの日付形式を上書きしないでください。むしろ、あなたのビューは、日付のその特定のレンダリングに適したフォーマットを明示的に要求する必要があります。これは、必ずしもすべてのビューまたは同じビューで同じではありません。 – meagar

+0

私はちょうど私があまりにも怠惰なビューのすべてのメソッドすべてのメソッドを呼び出すを繰り返すしたくないですか? – allenhwkim

+0

すべてのモデルの日付時刻でローカリゼーションを使用する設定はありませんが、どちらかをオーバーライドすることをお勧めしません=>これらの方法は多くのレールを変更し、結果が不確定で、奇妙な動作につながります。あなたは多くの時間がかかるので、これは怠惰な方法です) – Vikko

0

これを試してみて、多分物事は大丈夫でしょう:

User.find_by_created_at(DateTime.now)