Tôi có trường ngày sinh được lưu trữ dưới dạng giá trị ngày giờ. Các trình trợ giúp biểu mẫu đường ray mặc định tạo ra một định dạng không thân thiện, ví dụ: "2008-06-10 22: 33: 19.000000". Dưới đây là đường ray vanilla.Đường ray: Định dạng ngày thân thiện với con người cho text_field
<div class="field">
<%= f.label :birth_date %>
<%= f.text_field :birth_date, :size=>"20" %>
</div>
Tôi có thể áp dụng định dạng đơn giản bằng cách nào? Tôi đã thử các cách tiếp cận khác nhau, ví dụ như strftime nên hoạt động, tôi nghĩ. Nhưng khi tôi thử những điều sau đây, tôi nhận được một lỗi undefined method 'strftime' for nil:NilClass
<div class="field">
<%= f.label :birth_date %>
<%= f.text_field :birth_date, :value=>f.object.birth_date.strftime('%m/%d/%Y'), :size=>"20" %>
</div>
Dựa trên một số câu hỏi/câu trả lời khác, tôi đã cố gắng như sau. Nó hoạt động cho các giá trị không null, nhưng nó là mã xấu, và nó không hoạt động cho các giá trị trống (thực sự nó cho thấy ngày hôm nay).
<div class="field">
<%= f.label :birth_date %>
<%= f.text_field :birth_date, :value=> Time.parse(f.object.birth_date.to_s).strftime('%m/%d/%Y'), :size=>"20" %>
</div>
Khi chơi xung quanh, có vẻ như xuất f.object.birth_date được coi là ngày, thay vì ngày giờ. Tuy nhiên, khi được hiển thị trong text_field (định dạng gốc, xấu), nó bao gồm thời gian. Đó là buổi chiều thứ sáu, và sự thiếu hiểu biết kết hợp của tôi với các hình thức đường ray và các đối tượng ngày/giờ của ruby khiến tôi cảm thấy ngu ngốc.
Bất kỳ cách đơn giản nào để biểu mẫu của tôi hiển thị không có gì nếu trống/trống và một ngày thân thiện khác?
Cảm ơn, hãy làm những gì tôi cần. Tôi đã nhầm lẫn lý do tại sao điều này không ném một lỗi khi làm điều đó mà không có kiểm tra nil không. Tôi nghĩ rằng tôi có nó được sắp xếp ngay bây giờ. Điều này làm những gì tôi muốn (mặc dù vẫn còn có vẻ như rất nhiều mã). –
Bạn được chào đón. Lý do tại sao nó ném một lỗi mà không có kiểm tra 'nil' là bởi vì khi' f.object.birth_date' là 'nil', bạn sẽ thử gọi' strftime' trên nó. Bởi vì 'nil' không có phương thức' strftime', nó ném lỗi. – Claw