2010-04-02 41 views
5

DataMapper có cung cấp cách thuận tiện để tạo bản ghi mới khi không tồn tại hoặc cập nhật bản ghi hiện tại không? Tôi không thể tìm thấy bất kỳ thứ gì trong tài liệu API.DataMapper: Tạo bản ghi mới hoặc cập nhật hiện tại

Đây là những gì tôi có tại thời điểm đó không có vẻ rất thanh lịch:

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

Trả lời

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

hoặc

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

Kể từ phiên bản 1.1.0 này sẽ tăng DataMapper :: UpdateConflictError, Cập nhật Foo # không thể được gọi trên tài nguyên mới –

1

Tôi chỉ cố gắng

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

nhưng nó đôi khi bị sai, vì vậy tôi tìm thấy một số mẹo từ đây: DataMapper Docs

Bây giờ tôi làm cho mã của tôi làm việc như:

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

Hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan