2010-04-02 1 views
5

DataMapper는 존재하지 않는 새 레코드를 만들거나 기존 레코드를 업데이트하는 편리한 방법을 제공합니까? API 설명서에서 아무 것도 찾을 수 없습니다.DataMapper : 새 레코드 만들기 또는 기존 업데이트

foo = Foo.get(id) 
if foo.nil? 
    foo = Foo.create(#attributes...) 
else 
    foo.update(#attributes...) 
end 
foo.save 

답변

4
Foo.first_or_create(:id=>id).update(attributes) 

또는

(Foo.get(id) || Foo.new).update(attributes) 
+12

버전 1.1.0부터 DataMapper :: UpdateConflictError, Foo # 업데이트가 새 리소스에서 호출 될 수 없습니다. –

1

난 그냥

Foo.first_or_create(:id=>id).update(attributes) 

하지만 그것을 시도 :

내가 매우 우아하지 않는 것 순간에 무엇을 가지고 때로는 잘못되었으므로 여기에서 몇 가지 팁을 찾으십시오.
Foo.first_or_create({:id=>id}, {:name => name}).update(:id => id, :name => name) 

가 당신을 도움이되기를 바랍니다 :

지금 나는 내 코드가 같이 작동합니다.