2013-02-05 38 views
6

Tôi cần hiển thị ngày ở định dạng được bản địa hóa. tức là 12/31/2013Rails 3, Chỉ xem định dạng ngày?

Vì vậy, tôi thiết lập các định dạng ngày mặc định sang định dạng mà trong config/initializers/datetime_formats.rb

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

Tuy nhiên, kiểm tra của tôi thất bại trong kiểm tra đơn vị vì một số tìm kiếm được dựa trên Định dạng ngày tháng. Ví dụ:

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

Tất nhiên, tôi có thể thay đổi tất cả các kiểu để sử dụng tìm kiếm ngày hoặc giờ để thay thế chuỗi. Nhưng, tôi đã tò mò nếu chúng ta có thể áp dụng định dạng ngày chỉ xem hoặc định dạng thời gian chỉ xem hoặc không.

Có cách nào để áp dụng định dạng ngày (hoặc giờ) chỉ xem không?

----- chỉnh sửa -----

Tôi đã có phương thức tùy chỉnh l_or_none cho các chế độ xem có xử lý ngoại lệ.

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

Tôi chỉ không muốn lặp lại phương pháp này trên tất cả các quan điểm, và tìm kiếm một cách, "nếu ngày # to_s được gọi là theo quan điểm, định dạng theo cách này", mà không sử dụng phương pháp riêng của tôi.

Tại sao chúng ta không có khái niệm như thế này?

"Nếu đối tượng này được sử dụng theo quan điểm, phương pháp ghi đè theo cách này"

+0

Bạn có thể thêm một số phương pháp theo quan điểm của bạn để hiển thị định dạng cục bộ của bạn mà không cần chạm initializers của bạn. Có phải đó là những gì bạn cần? – Vinay

Trả lời

18

Bạn có thể sử dụng nội địa hóa ray:

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" 

Và trong giao diện:

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

kết quả:

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

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

+0

@bighostkim Chắc chắn điều này. Bạn không nên ghi đè định dạng ngày mặc định của ứng dụng; thay vào đó, chế độ xem của bạn phải yêu cầu rõ ràng định dạng phù hợp với việc hiển thị cụ thể của ngày đó, không nhất thiết phải giống nhau trên tất cả các chế độ xem hoặc thậm chí trong cùng một chế độ xem. – meagar

+0

Tôi chỉ không muốn lặp lại gọi phương pháp l tất cả các phương pháp trên tất cả các quan điểm, m tôi quá lười biếng? – allenhwkim

+0

Không có cài đặt để sử dụng bản địa hóa trên tất cả các kiểu ngày, tôi sẽ không khuyến nghị ghi đè hoặc => Những phương pháp đó sẽ thay đổi rất nhiều đường ray dưới mui xe và sẽ dẫn đến kết quả không thể xác định và hành vi lạ. bạn rất nhiều thời gian, vì vậy đây là cách lười biếng;) – Vikko

0

Hãy thử điều này và có lẽ mọi chuyện sẽ ok:

User.find_by_created_at(DateTime.now) 
Các vấn đề liên quan