2013-02-05 13 views
6

Avevo bisogno di mostrare la data in formato localizzato. cioè 12/31/2013Rails 3, Visualizza solo il formato della data?

Pertanto, ho impostato il formato di data predefinito in tale formato in config/inizializzatori/datetime_formats.rb

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

Tuttavia, i miei test fallito nel test di unità, perché alcune ricerche si basano su formato data. Per esempio

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

Certo, posso cambiare tutti i modelli di utilizzare tutte data o datetime di ricerca da utilizzare classe Date o classe DateTime invece di stringa. Ma, mi sono incuriosito se possiamo applicare il formato di data di sola visualizzazione o il formato di tempo di sola visualizzazione o meno.

Esiste un modo per applicare il formato della data di visualizzazione (o dell'ora)?

----- ----- modificare

Ho già metodo personalizzato per l_or_none opinioni con la gestione delle eccezioni.

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

io non voglio ripetere questo metodo in tutto i punti di vista, e in cerca di un modo, "se la data # to_s è chiamato a vista, formattare in questo modo", senza utilizzare il mio metodo.

Perché non abbiamo un concetto come questo?

"Se questo oggetto viene utilizzato in vista, metodo di sostituzione in questo modo"

+0

È possibile aggiungere qualche metodo in immagine per mostrare il formato localizzato senza toccare l'inizializzatori. E 'quello di cui hai bisogno? – Vinay

risposta

18

Si potrebbe utilizzare la localizzazione di rotaie:

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" 

E nella vista:

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

risultato:

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

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

+0

@bighostkim Sicuramente questo. Non dovresti ignorare il formato di data predefinito a livello di applicazione; piuttosto, le tue opinioni dovrebbero richiedere esplicitamente il formato appropriato per quel rendering specifico della data, che non è necessariamente uguale per tutte le viste o anche nella stessa vista. – meagar

+0

Non voglio ripetere la chiamata l metodo all in tutte le viste, sono troppo pigro? – allenhwkim

+0

Non ci sono impostazioni per usare la localizzazione su tutti i tempi delle date dei modelli, non consiglierei di sovrascrivere o => Quei metodi cambieranno molte cose delle rotaie sotto la cappa e porteranno a risultati indefinibili e comportamenti strani. La soluzione costerebbe sei un sacco di tempo, quindi questo è il modo pigro;) – Vikko

0

Prova questo e forse le cose saranno ok:

User.find_by_created_at(DateTime.now) 
Problemi correlati