2012-04-20 2 views
0

date_received, created_at 및 received_state가있는 송장 모델이 있습니다.레일 3 - 레코드 생성시 날짜 비교

레코드를 만들 때 date_received와 created_at를 비교하여 received_state를 업데이트하려고합니다. 특히 created_at가 date_received보다 2 일 이상 큰 경우 received_state는 red와 같아야합니다. 따라서 다음과 같은 내용이 있습니다 :

if created_at > date_received + 2 days 
    @invoice.update_attribute(:received_state, red) 
else 
    @invoice.update_attribute(:received_state, green) 
end 

나는 date-in-words 도우미 메서드가 있지만이 인스턴스에서 사용하는 방법을 모르겠습니다. 도움을 주셔서 감사합니다.

업데이트 : 다음을 시도했습니다.

if (:date_received - :created_at).to_i > 2 
    @invoice.update_attribute(:received_state, red) 
else 
    @invoice.update_attribute(:received_state, green) 
end 

UPDATE : 2 : 없음 오류가 있지만, 기록 중 상태로 업데이트하지되어 나는 다음을 시도하고, 기록은 조건 녹색이 충족 된 경우에도 빨간색으로 업데이트됩니다

if :date_received.to_i - :created_at.to_i > 2 
    @invoice.update_attribute(:received_state, red) 
else 
    @invoice.update_attribute(:received_state, green) 
end 

답변

0

우선 해당 생성하기 전에 개체를 업데이트 할 경우 날짜 비교를 위해 대신 update_attributes

self.received_state = ...를 사용할 수있는, 당신은 내가 어쩌면, 뭔가 확실하지 않다,하는 callback method (before_create 경우 귀하의 경우)를 사용한다 그 일을 할 수 있습니다

d = self.date_received.clone 
d.advance({:days => 2}) 
if self.created_at > d 
    ... 
+0

입력 해 주셔서 감사합니다. 나는 시도했다 :'before_create do | invoice | D = date_received d.advance ({: 일 => 2}) created_at> D invoice.received_state = 빨간색 다른 \t \t invoice.received_state = 녹색 \t 끝 \t 말 '만은 "정의를 얻을 수있는 경우 method '>'for nil –

+0

@KatieM'before_create' 메쏘드에서 모든 속성은'self'로 접근해야합니다. 내 게시물을 업데이트했습니다 .. – Baldrick

+0

다시 한번 감사드립니다. "self"로 모든 것을 바꿨습니다. received_state at null (null), 그리고 내가 보러 갈 때, true를위한 정의되지 않은 메소드를 말하고있다 : def received_state d = self.date_received d.advance ({일 => 2}) \t 다른 == 녹색 \t 단부 end' \t self.received_state 적색 self.created_at> D self.received_state 경우 == –

0

가 내가 쓴 것 :

if Date.current - 2.days > date_received 
    self.received_state = red 
else 
    self.received_state = green 
end 

를 사전이 만들어 후크에.