2013-02-05 12 views
6

Musiałem pokazać datę w zlokalizowanym formacie. tj 12/31/2013Szyny 3, tylko format daty wyświetlania?

Dlatego też ustawić domyślny format daty do tego formatu w config/inicjalizatory/datetime_formats.rb

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

Jednak moje badania nie powiodło się w testach jednostkowych, ponieważ niektóre pytania są oparte na format daty. Na przykład:

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

Oczywiście, mogę zmienić wszystkie modele, aby użyć wszystkich wyszukiwań daty lub datetime do użycia klasy Data lub klasy DateTime zamiast łańcucha. Ale jestem ciekawy, czy możemy zastosować format daty tylko do widoku lub format czasu tylko do wyświetlania, czy nie.

Czy istnieje sposób na zastosowanie formatu daty (lub czasu) tylko do wyświetlania?

----- edit -----

mam już niestandardową metodę l_or_none dla poglądów z obsługi wyjątków.

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

Ja po prostu nie chcę powtarzać tę metodę całym poglądami i szukają sposobu, „jeśli Date # to_s nazywa zdaniem, Format ten sposób”, bez korzystania z własną metodę.

Dlaczego nie mamy takiego pomysłu?

„Jeśli cel ten jest stosowany pod zdaniem metoda obejścia w ten sposób”

+0

Możesz dodać niektóre metody w celu pokazać swoją zlokalizowaną formatu bez dotykania inicjatorów. Czy to jest to, czego potrzebujesz? – Vinay

Odpowiedz

18

można użyć lokalizację szyn:

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" 

A w widoku:

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

wynik:

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

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

+0

@bighostkim Zdecydowanie to. Nie powinieneś nadpisywać domyślnego formatu daty w całej aplikacji; raczej, twoje poglądy powinny wyraźnie żądać formatu odpowiedniego dla tego konkretnego renderowania daty, co niekoniecznie musi być takie samo we wszystkich widokach, a nawet w tym samym widoku. – meagar

+0

Po prostu nie chcę powtórzyć wywołanie metody l wszystkie metody wszystkich widoków, m I zbyt leniwy? – allenhwkim

+0

Nie ma ustawień, które umożliwiałyby lokalizację we wszystkich modelach czasów, nie polecam zastępowania albo>> Te metody zmienią wiele rzeczy pod maską i doprowadzą do niedefiniowalnych rezultatów i dziwnych zachowań. Naprawienie ich będzie kosztować masz dużo czasu, więc to jest leniwy sposób;) – Vikko

0

Spróbuj tego i być może wszystko będzie ok:

User.find_by_created_at(DateTime.now)