2013-08-25 4 views
1

레코드가 새로 저장되었는지 확인하는 방법을 알아낼 수 없습니다. 지금은 쿼리가 잘 작동레코드가 새로 작성되었는지 확인하십시오.

If @item.save 
     @a = Item.where(“restaurant_id = ?”, params[:item][:user_id]).where(“created_at < ?”, 2.minutes.ago) 

를 사용하고 있지만 레코드가 방금 만든 있는지 확인하는 더 나은 방법이 있는지 궁금 하군요. ActiveModel :: Dirty를 살펴 보았지만 일단 레코드가 저장되면 : created_at_changed? 거짓을 반환합니다.

+1

체크 아웃이 질문 + 답변 : http://stackoverflow.com/questions/7842920/determine-if-activerecord-object-is- new-or-created – Mattherick

+0

또는 심지어 http://stackoverflow.com/questions/7842920/determine-if-activerecord-object-is-new-or-created – msbarnard

답변

1

레일이이를 확인하는 방법을 제공하지 않는다고 생각합니다. 직접 구현할 수도 있습니다. 당신은 모든 액티브의 모델을 원하는 액티브 :: 기본 클래스에 추가하는 경우

def recently_created? 
    Item.where("restaurant_id = ? AND created_at < ?", params[:items][:user_id], 2.minuted.ago) 
end 

.

+0

답장을 보내고 구문을 수정 해 주셔서 감사합니다. – Ria

7

기록을 위해 레일즈 4와 5는 모두이 기능을 가지고 있습니다.

레일 4, 당신은 할 수 있습니다 :

@item.previous_changes.key?('id') 

그리고 레일 5를 :

@item.id_previously_changed? 

[참고 :이 수동으로 레코드의 ID를 업데이트 결코 당신을 가정합니다. 만약 그렇다면, 당신은 다음과 같은 더 같이 뭔가가 필요합니다]

@item.previous_changes.key?('id') && @item.previous_changes['id'][0].nil? 
관련 문제