2009-09-14 6 views
22

레일보기에서 DateTime 값의 표시 형식을 쉽게 지정할 수 있습니까? 내가 좋아하는 뭔가를하고 있어요 예를 들어레일에서 텍스트 상자의 날짜 시간 형식

:

<%= text_field :my_object, :start_date %> 

을 만 :start_date의 날짜 부분을 (내가 시간 부분을 숨기려 예) 표시하려면, 포맷하는 방법은 무엇입니까 새 my_object 항목을 만들고 새로운 my_object 항목을 업데이트 할 수 있도록보기 내부에 :start_date 문자열이 포함되어 있습니까?

그냥 설명 :

<%= text_field 
     :my_object, 
     :start_date, 
     :value => @my_object.start_date.strftime('%m/%d/%Y') %> 

이렇게 개체가 이미 존재하는 경우 (즉, 아이템 업데이트에)하는 새로운 항목을 만들 때 아름답게 그러나 이후 START_DATE가 처음 것이다 작동 보기가 오류가됩니다.

while evaluating nil.strftime 

답변

35

텍스트 필드의 날짜 형식을 특정 형식으로 지정하려는 경우 (예 : 자바 스크립트 날짜 선택기와 통합하는 경우), nils를 다루는 경우 간단하게 생각합니다. 기존의 방법에 약간의 비틀기를 만드는 것은 트릭을 할 것입니다 : 내 application_helper.rb에서

:value => (@object.start_date.blank? ? '' : @object.start_date.strftime('%m/%d/%Y')) 
+0

끝에 닫는 괄호가 없습니다. 그러나 그렇지 않으면 이것이 처음에 한 것입니다. 나는 결국'start_date'를 객체의 현재 날짜로 초기화하는 길을갔습니다. 그래서'start_date'는 결코 처음에는'nil'이되지 않을 것입니다. – jerhinesmith

+0

심지어 청소기 : 값 : @ object.start_date.blank?) –

+0

@ OleHenrikSkogstrøm nil은 공백 문자열과 같지 않습니다 (datepickers가 아닌 @ object.start_date.strftime ('% m/% d/% Y') 나는 필수품을 사용했다). 비록 그것이 당신을 위해 작동한다면 확실히 그렇게하지 않는 한 확실히 사용하십시오. –

4

R 양식 객체에 연결되어, (<% form_for(:object) do |f| %> 같은) 당신이 다음

없음이 작업을 수행하려면,하지만 난 희망 확실한 이유가 그것의/environment.rb에 설정에 :date_format을 등록 할 수 있습니다 <%= f.text_field :start_date, :value => f.object.start_date.to_s(:date_format) %>

를 사용한다 발표 목적으로 만 사용됩니다. 나는 세 가지 방법의

+1

대부분 시간을 입력하거나 입력해야한다고 생각하지 못하게하는 것이 대부분입니다. 대부분의 사용자에게 "2019-09-10 17:00:18"그냥 친절하지 않습니다. 나는 오히려 "09/10/2009"라고 표시하고 싶습니다. 왜냐하면 시간 부분은 제가하고있는 일에 완전히 불필요하기 때문입니다. – jerhinesmith

+0

그렇다면 일반 입력 대신 select_date 도우미를 사용해야합니다. – Eimantas

+0

날짜를 선택하는 경우 동의합니다. 일정 또는 select_date 도우미가 더 나은 접근 방법입니다. – Yaraher

7

을 생각할 수 있습니다 :

1) 모델에 대한 새로운 방법을 만들기 그러나 당신은 그것을 필요 당신의 날짜를 포맷 할

2) 동일한 기능을 수행 할 도우미 메서드 만들기

3) 당신이하고 시도 유무 :

<%= text_field 
    :my_object, 
    :start_date, 
    :value => @my_object.try(:start_date).try(:strftime,'%m/%d/%Y') %> 
+0

3 번이 나를 위해 아름답게 작동했습니다. 감사. – brad

2

나는 어떤 edit.html에서

def nice_date_form(the_date) 
    return the_date.strftime('%d-%m-%Y') 
end 

을 넣어.JQuery와의 날짜 선택기와 ERB보기 파일 I 다음 사용

<% if @activity.end_date? %> 
    <%= f.text_field :end_date, :value => nice_date_form(@activity.end_date) %> 
<% else %> 
    <%= f.text_field :end_date %> 
<% end %> 
+0

'the_date'가 nil이면 오류를 발생시키지 않습니까? – jerhinesmith

+0

@ jerhinesmith 당신은 절대적으로 맞습니다. 제대로 테스트하지 않았습니까? 위의 코드를 nil을 테스트하도록 변경했습니다. Dave Rapin이 멋진 일선에서 그랬던 것처럼 그렇게 할 수도 있습니다. –

+0

'nice_date_form'을'return (the_date? the_date.strftime ('% d- % m- % Y') : ')'와 같은 것으로 변경하면 어떻게 될까요? 그런 다음보기에서 조건부를 제거 할 수 있어야합니다. – jerhinesmith

0

를 헬퍼에서

def l(value, options = {}) 
    return nil unless value.present? 
    value = value.to_date if value.is_a? String 
    super(value, options) 
end 

여기에

<%= f.text_field :end_date, class: "datepicker" :value => l(@activity.end_date) %> 

l 뷰에 것은 레일 도우미 (I18n.l) 인 수 로케일 특정이어야하며 형식을 취할 수 있습니다. 예 :

이것은 이용한 모형 층에 무미건조하게 취급 할 수
l(@activity.end_date, format: :short) 
l(@activity.end_date, format: "%d-%m-%Y") 
<attribute>_before_type_cast
1

방법 변이체 레일을 제공. Rails는 이미이 형식을 사용하여이 방법을 사용하므로 기본값을 덮어 쓰고 있습니다. 예를 들어 :

class MyModel 
    def start_date_before_type_cast 
     return unless self[:start_date] 
     self[:start_date].strftime('%m/%d/%Y') 
    end 
end 

이 방법은 어디서나 당신은 당신이 "무료"서식 얻을 MyModel 번호의 시작일 필드에 대한 텍스트 필드가 있습니다.