2013-07-16 3 views
0

내 백본 앱에서 API 반환 날짜를 유닉스 타임 스탬프 (정수)로 결정했습니다. 백본 모델에서 save를 호출하면 해당 정수가 레일로 전송되지만 레일은이 모든 것을 함께 건너 뛰는 것처럼 보이는데 실제로는 정수이므로 의미가 있습니다. 어떻게 알 수 있습니까? 레일이 날짜로 사람들을 인식하고 그에 따라 내 PARAMS 해시에서이를 사용할 곳레일스 unix 타임 스탬프를 params 해시의 datetime으로 변환하지 않습니다.

어떤 '자동'솔루션은 있습니까? 수동으로 해당 속성을 변환하지 않습니까?

지금까지 두 가지 해결책이 있습니다

백본 모델의 toJSON() 메서드를 재정의, 그것을 클라이언트 측를 수행 : 나는 잃을 때문에

toJSON: -> 
    attrs = @attributes 
    attrs.start = new Date(@attributes.start) 
    attrs.finish = new Date(@attributes.finish) 
    _.clone(attrs) 

나는이 방법을 좋아하지 않는다 내가 왜 타임 스탬프를 사용하여 백본의 findWhere (start : timestamp)를 사용할 수 있는지에 대한 이점을 얻었습니다. 그래 .. 무의미한.

서버 측 :

params[:event][:start] = DateTime.strptime(params[:event][:start].to_s,'%s') 

아니면 내가 미쳤다고하고 그것을 다른 방법으로 일을해야 하는가? Rails는 백본과 잘 어울리는 것을 이해합니다. 나는 기본적으로 클라이언트 측 날짜별로 이벤트를 검색하는 쉬운 방법을 찾고 있습니다.

답변

0

내가 당신이 더 나은 아이디어가 있으면 알려,하지만 난 같은 대답으로이 표시거야 제발 ...

는 내 이벤트 컨트롤러 생성하고 보여 행동에 대한 간단한 before_filter으로가는 끝났다. 때로는 레일이 당신을 위해 너무 많은 마술을하기를 원한다. 2 개의 커스텀 라인을 작성하는 것은 게으름이다!

before_filter only: [:create, :update] do 
    params[:event][:start] = DateTime.strptime((params[:event][:start]/1000).to_s,'%s') if params[:event][:start].present? 
    params[:event][:finish] = DateTime.strptime((params[:event][:finish]/1000).to_s,'%s') if params[:event][:start].present? 
end 
0

에는 자동 변환 메커니즘이 없다 (정수는 타임 스탬프, 심지어 긴 것! 것으로 가정 할 수 없기 때문에), 그러나 당신이 발견으로 before_filter으로 쉽게 할 충분하다. 또한이를 감싸고 조금 더 깨끗하게 만드는 것은 그리 어렵지 않습니다.

def convert_javascript_times!(hash) 
    return unless hash 
    hash.each do |key, val| 
    hash[key] = Time.at(val.to_i/1000) 
    end 
end 

before_filter only: [:create, :update] { convert_javascript_times! params[:event] } 
관련 문제