2016-07-12 2 views
0

의 두 모델이 있습니다. 각 모델은 데이터 형식이 created_at이라는 필드를 가지고 있는데 json 응답을 렌더링하는 동안 created_at 필드의 형식을 지정해야하지만 두 모델 모두 다릅니다. 2016 주석 모델 형식에 대한레일 모델 특정 날짜 작성

5월 12일 해야 형식을 게시 모델에 대한

는 2016년 5월 12일

모델에 특정과 형식을 지정하기위한이 어떤 옵션입니다 ?

그리고 다른 곳에서 날짜를 표시했기 때문에 추가 기능을 갖고 싶지 않습니다. 그래서 함수를 작성하면 모든 곳에서 바꿔야합니다.

+1

JSON이 ISO8601 시간 및 날짜 형식을 포함하고 소비자가이를 표시하는 방법을 결정할 수는 없습니까?일반적으로 서식 지정 문제를 가장 좋은 방법으로 푸는 것이 가장 좋은 방법입니다. –

+0

@muistooshort 나는 소비자가 통제권을 갖고 싶어하지 않는다. –

답변

0

모델에 함수를 직접 생성하여 created_at의 datetime을 원하는대로 되돌릴 수 있습니다.

class Post < ActiveRecord::Base 
    def get_date 
    created_at.strftime("%b %-d %y") 
    end 
end 

class Comment < ActiveRecord::Base 
    def get_date 
    created_at.strftime("%m-%d-%Y") 
    end 
end 

후 바로보기에 다음을 넣어 다음 strftime 방법을 사용하여 날짜를 포맷 더 많은 방법을

<%= @comment.get_date %> 

이 체크 아웃 : http://apidock.com/ruby/DateTime/strftime

업데이트 (지금 질문하기 JSON에 대한 필요성)

class Post < ActiveRecord::Base 
    def as_json(options) 
    super(options).merge({ 
     :created_at => self.created_at.strftime("%b %-d %y") 
    }) 
    end 
end 

class Comment < ActiveRecord::Base 
    def as_json(options) 
    super(options).merge({ 
     :created_at => self.created_at.strftime("%m-%d-%Y") 
    }) 
    end 
end 
+0

나는 다른 곳에서 날짜를 표시하는 데 익숙했기 때문에 추가 기능을 사용하고 싶지 않습니다. 그래서 함수를 작성하면 모든 장소에서 날짜를 변경해야합니다. –

+0

마지막 두 코드 블록 (업데이트 이후)은'as_json' 메서드를 사용할 때 JSON 객체에만 영향을줍니다. 당신은 다른 사람들이 그 일을하기 위해 사용할 필요가 없습니다. – Okomikeruko

+0

as_json을 사용하고 있으면이 작업이 정상적으로 작동하지만 as_json을 사용하지 않으면 어떻게됩니까? –

0

당신은 자동으로 레일이 제공된다 I18n를 사용해야을 flects.

형식을 설정하려면 config/locales/<current_locale>.yml으로 이동하십시오 (current_locale 기본값은 en입니다).

<p><%= I18n.l @post.created_at, format: :default %></p> 
<p><%= I18n.l @comment.created_at, format: :short %></p> 

을하거나 더러운, 비공식적 인 방법을 원한다면, 당신은 모델에 게터를 덮어 쓸 수 있습니다 :보기에

en: 
    time: 
    formats: 
     default: "%b %-d %y" 
     short: "%m-%d-%Y" 

당신은 다음과 같이 사용할 수 있습니다

class Post < ActiveRecord::Base 
    def created_at 
    I18n.l(super)  
    end 
end 

참고 created_at의 getter를 덮어 쓰기 때문에이 작업은 정말 불쾌합니다. 날짜이기 때문에 더 이상 실제 날짜/시간 객체를 사용할 수 없습니다. 대신 매번 String을 얻을 것이다.

I18n을 사용하십시오! 레일스로 날짜를 포맷하는 좋은 방법입니다.

+0

포맷하는 방법 중 하나이지만 모델의 모델에 속성의 기본 형식을 설정하는 옵션이 있습니다 –

+0

@BalaKarthik 편집을 참조하십시오. – siegy22