2011-07-27 2 views
4

사용자의 생일을받는 양식이 있습니다.레일에서 날짜를 변경하는 연도

나는 생일을 가져다 다른 속성에 저장하지만 현재 연도를 가져 가고 싶습니다.

나는 전화에 이렇게 다시

모델 보드

before_save : set_delivery_date

def set_delivery_date 

self.delivery_date = self.birthday 
self.delivery_date.change(:year => Time.now.year) 
end 

생일은 1920년 7월 27일

이것은을 변경하지 않는 것입니다 날짜.

누구든지이 작업을 수행하는 방법을 알고 있습니까?

업데이트

다음 작품을 내가 데이터베이스에 새로운 날짜 볼 수 있습니다 : 나는 RSpec에 테스트를 수행하려고 할 때

self.deliver_on = self.birthday.change(:year => Time.now.year) 

또는 내가 다음을 생산하는 콘솔에서 그것을 시도 오류 :

ArgumentError: invalid date 

왜 이런 일이 일어나는 지 아는 사람이 있습니까?

답변

7

change 메서드는 하나 이상의 요소가 변경된 새 날짜 인스턴스를 반환합니다.

이 시도 :

def set_delivery_date 
    self.delivery_date = self.birthday 
    self.delivery_date = self.delivery_date.change(:year => Time.now.year) 
end 
0

코드가 맞는 것 같습니다. 따라서 귀하의 개체가 저장되지 않은 이유를 확인합니다 :

  • 개체가 유효하지 않습니까? 예 : object.valid?은 false를 반환합니다. 유효성 검사는 저장 전에 수행됩니다.
  • 저장하지 않습니까?
0

액티브의 Dirty Object 기능 변경 사항에 대해 알고하지 않습니다. 변경 사항에 대한

def set_delivery_date 
    self.delivery_date = self.birthday 
    self.delivery_date = self.delivery_date.change(:year => Time.now.year) 

    # Shorter 
    self.delivery_date = self.birthday.change(:year => Time.now.year) 
end 

또는 액티브에게 :

def set_delivery_date 
    self.delivery_date = self.birthday 
    self.delivery_date_will_change! 
    self.delivery_date.change(:year => Time.now.year) 
end 
+0

내가 두 솔루션을 시도하고 지금은 유효하지 않은 날짜를 얻고이 문제를 해결하는 방법은 두 가지가 있습니다. 내가 단지 년을 바꾸고있는 것에 따라 매우 이상한. 어떤 아이디어? – chell

+0

self.birthday.change (: year => Time.now.year가 invalid_date 예외를 생성합니다. – chell

+0

테스트를 게시하거나 실제로 생일을 처리하기 전에'birthday'의 유효성을 검사 할 수 있습니까? –

관련 문제