2010-04-02 76 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#update – 2011-05-14 09:03:19

1

我只是嘗試

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

但有時會出錯,所以我從這裏找到一些提示:DataMapper Docs

現在,我讓我的代碼工作,如:

Foo.first_or_create({:id=>id}, {:name => name}).update(:id => id, :name => name) 

希望它可以幫助你。