まあ、あなたはそれを一行で書くことができます:
(User.first_or_create(:id => data['id'])).update(:field => value)
必要に応じて(または複数を指定する必要がある場合は)パラメーターのハッシュを使用します。first_or_createただし、これは で指定されたモデルが有効な場合にのみ機能することに注意してください。たとえば:name、必須フィールドの場合、これは機能しません。
(User.first_or_create({:id => data['id'], :name => "Morse"})).update(:name => "Lewis")
最初の部分の作成が失敗するためです。
次のような新しいレコードに必要なパラメーターを指定することで、これを回避できます
(User.first_or_create({:id => data['id'], :name => "Morse"}, {:name => "Lewis"})).update(:name => "Lewis")
しかし、これは非常に苦痛であり、読むのが困難です。
first_or_createまた、 withを使用すると、そのようなレコードが存在しない場合、:idその特定の でモデルを作成しようとすることに注意してください。:idこれはあなたが望むものではないかもしれません。
または、 を使用することもできますfirst_or_new。ただし、レコードが存在しないため、これを使用して作成されたオブジェクトを呼び出すことはできませんupdate(ただし、これは以前のバージョンの DataMapper では機能していた可能性があります)。