2010-04-09 5 views
4

필드 (updated_at)를 업데이트해야합니다. MySQL의 필드는 datetime이고 클래스는 ActiveSupport::TimeWithZone입니다. 그러나 날짜는 "10/17/2008"과 같은 문자열입니다. "10/17/2008".to_date (그리고 .to_time.to_datetime)을 사용했으며 콘솔에서 ActiveRecord 클래스가 성공적으로 저장되었다고해도 데이터베이스의 필드는 여전히 현재 날짜입니다.문자열을 ActiveSupport :: TimeWithZone으로 변환하는 방법은 무엇입니까?

답변

5

좋아 .. 시간에 하나씩 가져 가자.

먼저 필드 이름을 updated_at으로 설정하지 않는 것이 좋습니다. 이는 레일스에 의해 자동으로 채워지는 "마법"필드이기 때문입니다.

이 기능을 사용하지 않으려면

, 당신은 할 수 있습니다 :

클래스의
class Foo < ActiveRecord::Base 
    self.record_timestamps = false 
end 

하지만,이 또한 created_at 필드를 사용할 수 없게됩니다.

가장 좋은 옵션은 데이터베이스에 날짜로 새 필드를 (예를 들어 my_updated_at)를 추가하는 것입니다, 다음, 레일은 자동으로 다음 코드 조각이 작동한다는 것을 의미 변환을 처리합니다

Foo.new({:my_updated_at => "10/17/2008"}) 

둘째, 답을

ActiveSupport::TimeZone['UTC'].parse("10/17/2008") 

하지만 난이 (물론 현재 날짜/시간 UTC 변경) 당신을 도울 것입니다 생각하지 않습니다 ActiveSupport::TimeWithZone에 문자열을 구문 분석하는 방법이다.

+0

필자는 레일즈 콘솔'2.0.0p247 : 001> ActiveSupport :: TimeZone [ 'UTC'] .parse ("10/17/2008")'에서'ArgumentError : argument out of range'를 시도했다. 정말 당신을 위해 일해? 나는'Rails 4.0.4'를 사용하고 있습니다. – user664833

+0

여기에 있습니다. 나는 논쟁 거리를 벗어난다. 레일 4.0.5를 사용하고 있습니다. – Rystraum

+0

레일즈 3.2.16에서 작동하지 않습니다 – Styledev

관련 문제